我正在閱讀關於__block variables的文檔,並考慮了使用__block的情況。對我來說,這似乎是我需要它在兩種情況下:爲什麼__block變量不被保留(在非ARC環境中)?
- 爲了紀念一個變量作爲讀寫塊
- 內使用時,爲了避免塊內引用自當保留週期
從表面上看,這兩件事似乎並不相關。我認爲,__block變量不被保留爲我需要記住的避免保留週期的特定用例的更多技巧。
我想知道,是否有一個更重要的建築原因,爲什麼他們不能被保留?我認爲其他關鍵字可能會更清楚地表明這一點,以免混淆上面列出的兩個功能。
更新 -
我應該提到這是不使用ARC的代碼。我現在看到__block變量實際上保留在ARC中。
您只使用'__block'作爲第一個。您可以使用'__weak'而不是'__block'來避免保留週期。 – rmaddy
另外,你在哪裏得到__block變量不被保留的想法? ARC會自動保留它們,就像常規變量一樣。 –
在ARC之前,__block變量確實不被保留爲避免保留週期的機制。這一點隨着ARC而改變,並記錄在轉換到ARC版本說明中。 –