我有一個屬性類,它是對塊的弱引用。捕獲「自我」時,弱保留塊如何導致保留週期
@interface BlockTest : NSObject
@property (nonatomic, weak) void(^testBlock)();
@end
在我使用這個塊這樣的類另一點:
- (void)foobar {
self.testBlock = ^{
[self doSomething];
};
}
編譯器(蘋果LLVM 3.0)抱怨說,有可能是一個保留週期,因爲self
強烈這裏拍攝的。但我沒有看到這是如何導致保留週期,因爲塊本身是一個__weak
參考,所以它應該沒問題。如果我正確理解ARC弱引用,那麼當-foobar
方法返回傳遞給self.testBlock
的塊時,應該解除分配(如果不在其他地方),因此也會釋放self
。
編譯器仍然認爲可能存在保留週期的原因是什麼?
你的設置幾乎沒用。在函數退出後,塊將立即解除分配,因爲沒有強引用。該物業將'無'。 – newacct 2013-04-04 22:28:07
這不是普遍的事實。全局和堆棧塊將不會保留或釋放,因此在分配後仍然有效(對於堆棧塊直到當前範圍結束)。這也只是一個例子。這個想法並不是阻止任何東西。 IIRC當我問這個問題時,我正在尋找一種方法來捕獲'self'方法的回調塊中的'self',而不會觸發警告。 – Alfonso 2013-04-05 22:26:59