回答
讀Transitioning to ARC Release Notes
使用Xcode的指南:編輯>重構>轉換成Objective-C的ARC。首先,它可能會報告各種問題(在預先檢查階段),嘗試修復所有問題,再次嘗試(再次建立和失敗),最後在所有問題都會順利完成時最終順利完成修復,讓您的代碼與ARC。
請注意,預檢規則比平常的構建設置更加困難。
簡短回答是肯定的。 strong
是相當於retain
的ARC,而weak
相當於assign
,只有它也爲零(如果對象被釋放,則將指針設置爲nil
,防止潛在的EXC_BAD_ACCESS
崩潰),所以它甚至優於assign
。如前所述,如果您有興趣,Transitioning to ARC Release Notes頁面會提供更多詳細信息。
據我所知,strong
和retain
是同義詞,所以他們做的恰好與相同。
編輯:另外unsafe_unretained
是assign
的同義詞,因爲 nielsbot 指出。
然後weak
幾乎就像assign
,但是在它指向的對象被釋放後自動設置爲零。
這意味着,您可以簡單地更換它們。
但是,我遇到了一個特殊情況,我不得不使用assign
而不是weak
。假設我們有兩個屬性delegateAssign
和delegateWeak
。在這兩者都存儲我們的代表,這是擁有我們的唯一有力的參考。代表正在釋放,因此我們的-dealloc
方法也被調用。
// Our delegate is deallocating and there is no other strong ref.
- (void)dealloc {
[delegateWeak doSomething];
[delegateAssign doSomething];
}
的代表已經在釋放過程中,但還沒有完全釋放。問題是weak
對他的引用已經無效!屬性delegateWeak
包含零,但delegateAssign
包含有效的對象(所有屬性已經釋放並且無效,但仍然有效)。
// Our delegate is deallocating and there is no other strong ref.
- (void)dealloc {
[delegateWeak doSomething]; // Does nothing, already nil.
[delegateAssign doSomething]; // Successful call.
}
這是很特殊的情況,但它揭示了我們那些weak
變量是如何工作的,他們都無效的時候。
我認爲'assign'和'unsafe_unretained'在ARC下是等價的 – nielsbot 2013-01-27 10:45:40
- 1. vuforia Objective-C自動引用計數(ARC)
- 2. 自動引用計數(ARC)和retainCount
- 3. iOS:MBProgressHUD和自動引用計數(ARC)
- 4. 引用計數,ARC
- 5. 引用計數在ARC
- 6. 的Objective-C - autoreleasepool(ARC - 自動引用計數)
- 7. 自動引用計數(ARC)和異步對象
- 8. ObjC自動引用計數(ARC):弱分配vs unsafe_unretained代表?
- 9. xcode ios關於dispatch_async和nsdata的ARC(自動引用計數)
- 10. iOS自動引用計數(ARC)向後兼容性?
- 11. 運行時檢查ARC(自動引用計數)
- 12. iOS 5上的自動引用計數(ARC)
- 13. 在自動引用計數(ARC)中的NSThreads
- 14. Objective-C自動引用計數(ARC)和鍵值觀察
- 15. OS 3.0上的XCode自動引用計數(ARC)
- 16. 如何將我的Xcode項目轉換爲使用ARC(自動引用計數)?
- 17. 自動引用計數
- 18. ARC和手冊引用計數
- 19. 自動引用計數(ARC)表示禁止調用[super dealloc] ...有什麼選擇?
- 20. 是否允許自動引用計數(ARC)應用程序進入App Store?
- 21. Objective-C正確使用ARC塊?
- 22. 正確使用計數
- 23. 引用計數遞減不正確
- 24. 不正確的引用計數遞減
- 25. 爲什麼使用弱引用時ARC會自動釋放?
- 26. 問題在轉換舊目標C代碼爲ARC(自動引用計數)
- 27. 自動引用計數(ARC)。 ARC可以處理一個簡單的ole c-array嗎?
- 28. 我如何確定我的項目是否使用自動引用計數
- 29. 正確橋接ARC?
- 30. 機構的自動引用計數
弱並不完全等同於賦值。 unsafe_unretained是等效的。實際上,弱點是需要運行時支持的新功能(iOS5/OSX10.6以上)。 。不同之處在於,當對象消失時weak將自動設置爲零,而assign/unsafe_unretained可以留下懸掛指針。 – 2013-01-27 10:27:15
到底是什麼,我剛剛評論過一個非常古老的問題。我到底怎麼了?我以爲我點擊了未答覆。 。 。當時ARC是新的,毫無疑問你現在知道這一切。 。 。值得一提的是。 – 2013-01-27 10:32:36