我讀Xcode的文件,這裏的東西,我感到困惑:__weak和__block引用有什麼區別?
__block typeof(self) tmpSelf = self;
[self methodThatTakesABlock:^ {
[tmpSelf doSomething];
}];
以下是從文檔複製:
塊形式的強引用它捕獲變量。如果在塊中使用
self
,則該塊形成對self
的強參考,因此如果self
也對該塊(其通常爲 所做的那樣)有強烈的參考,則會產生強的參考循環。爲避免此循環,您需要 在上面的示例中爲 創建對塊外部自我的弱引用(或__block
)。
我不明白'弱(或__block
)'是什麼意思?
是
__block typeof(self) tmpSelf = self;
和
__weak typeof(self) tmpSelf = self;
完全這裏同樣
我發現了另一塊在文件中:
注意:在收集垃圾環境,如果你同時申請
__weak
和__block
修飾符到一個變量,然後塊不會確保它保持活着。
所以,我完全不解。
很清楚,謝謝。 – HanXu 2012-08-02 12:59:28
這是否仍適用於使用ARC的iOS7?我運行了一個分析器,我發現我的控制器正在釋放,即使我沒有在塊中使用__block或__weak並引用self。 – 2014-08-13 06:06:29
對於想要查看文檔的人:https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html,https://developer.apple.com/library/ios /documentation/Cocoa/Conceptual/Blocks/Articles/bxVariables.html – 2015-01-27 05:52:32