问问题
965 次
1 回答
6
当两个或多个对象相互具有强引用时,就会发生保留循环。
在这种情况下,该块将具有对 的强引用self
,但self
对块没有强引用,因此您在这里很好,无需使用 weakSelf
.
当你有一个保留循环并且需要通过使用来打破它的weakSelf
情况是当类对块也有强引用时,如下例所示:
typedef void (^CompletionCallback)(RequestObj* request, NSError* error);
@interface SomeClass() {
/// Strong reference to the block
CompletionCallback completionBlock;
}
@end
@implementation SomeClass()
- (void)someMethod {
completionBlock = ^(RequestObj* request, NSError* error) {
/// Strong reference to the class
[self.tableView reloadData];
};
[AFnetworking requestGet:@"http://www.website.com" completionBlock:completionBlock];
}
@end
在此示例中,两者completionBlock
和self
都具有彼此的强引用,因此您将在这里有一个保留循环并需要中断它。
于 2013-10-09T19:24:09.053 回答