2012-03-03 56 views

回答

4

我只是起身加速ARC自己,但我有同樣的錯誤,所以也許我可以嘗試幫助這一點。

__unsafe_unretained用於想要支持iOS 4+。對於iOS 5.0+應該使用__weak。區別在於__weak指針歸零。意思是,當沒有別的東西引用該對象並將其釋放時,__weak指針將被設置爲零。所以如果你參考它,你不會得到一個EXC_BAD_ACCESS崩潰。

與ARC中的Objective-C對象一樣,像對象類型和限定符一樣,您現在必須指定生命週期。這就是爲什麼ARC知道如何合成保留/釋放呼叫。

如果您未指定任何內容,則默認值爲__strong

這些生命週期說明符必須匹配。

在你的情況,你正在分配一個指針__unsafe_unretained到另一個是__strong

要解決,請將接收指針更改爲__unsafe_unretained。這可能意味着將生命週期說明符添加到方法簽名中。例如:

- (void)myMethod:(__unsafe_unretained NSString *)aString 
{  
} 

不要忘記,__unsafe_unretained是因爲它的同名描述。這是不安全的,它不被保留!所以你最好在別的地方安全地保留這個對象,而不是在它被釋放後用這種方法引用它。你只會在委託中使用這個弱引用,例如父/子關係。對於其他任何事情,特別是正常的Objective-C ivars,你應該使用__strong

相關問題