1
我有其保持塊作爲對象屬性的類:ARC與塊和保持週期
@property (nonatomic, readwrite, copy) SFFailureBlock failureBlock;
其中SFFailureBlock:
typedef void (^SFFailureBlock)(NSError *error);
我已經操作也宣告作爲對象屬性( AFHTTPRequestOperation),我希望它在完成後調用失敗塊。
[self.operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
__weak NSError *error = [NSError errorWithDomain:@"com.test" code:100 userInfo:@{@"description": @"zero results"}];
failureBlock(error);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"nothing");
}];
我得到一個編譯器警告「捕獲‘自我’強烈該塊很可能會導致保留週期」。我搜索了互聯網,但我找不到一個體面的解決方案,爲什麼這會導致保留週期。我並不是在任何地方在街區內調用「自我」。
另一個奇怪的是,如果我寫'self.failureBlock(錯誤)'編譯器不給我任何警告!
任何人都可以向我解釋發生了什麼事嗎?我必須認真思考ARC內存管理規則中的某些內容,但我無法弄清楚。
除非我誤解了,否則在示例__weak或__unsafe_unretained中創建xFailureBlock也可能是一個好主意。 – 2012-07-28 02:06:38
我相信但不知道xFailure auto var for failure塊會複製塊(然後由封閉塊捕獲)。 – 2012-07-28 12:55:53
我明白了。但是,不是failureblock是控制器的實例屬性嗎?我認爲一般情況下,當我們做一些像「[self.myarray addObject:anObject];」在一個塊內,「myArray」不會被保留。我錯了嗎? – csotiriou 2012-07-29 15:07:49