4

當我有這行代碼爲__weak代替:不使用ARC

__weak NSBlockOperation *weakOperation = operation; 

其觸發此編譯器錯誤:

__weak attribute cannot be specified on automatic variable. 

原因是我沒有啓用ARC(尚未準備好進行切換)。因此,從另一個StackOverflow上的問題,我建議使用:

__unsafe_unretained NSBlockOperation *weakOperation = operation; 

這使得錯誤消失,但我使用它的背景下,它不工作(見這個問題,如果有興趣:How to cancel NSOperationQueue)。

所以我的問題是,在這種情況下,我可以用__weak關鍵字替代掉這個警告嗎?當我使用__weak時,所有的東西都能正常工作,但我擔心它不能支撐未來版本的iOS。

回答

7

你不應該擔心iOS的未來版本,因爲__weak是編譯器在爲你生成代碼時解釋的東西。

看着你的其他帖子向我建議,你的目標是儘量避免weakOperation儘管參考塊內。在你的具體情況下,如果你不使用ARC,你可以用__block代替__weak,以表示你的變量應該在捕獲期間保留而不是

請注意,__blockretain行爲的影​​響在ARC和手動保留計數之間有所不同。