3
4

1 回答 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

在此示例中,两者completionBlockself都具有彼此的强引用,因此您将在这里有一个保留循环并需要中断它。

于 2013-10-09T19:24:09.053 回答