Sending '__autoreleasing id *' to parameter of type '__unsafe_unretained id *' changes retain/release properties of pointer
任何人都可以幫我解決這個問題!將'__autoreleasing id *'發送給類型爲'__unsafe_unretained id *'的參數
Sending '__autoreleasing id *' to parameter of type '__unsafe_unretained id *' changes retain/release properties of pointer
任何人都可以幫我解決這個問題!將'__autoreleasing id *'發送給類型爲'__unsafe_unretained id *'的參數
我只是起身加速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
。