在完成块中访问超级的正确方法

时间:2013-11-14 19:38:39

标签: ios objective-c automatic-ref-counting objective-c-blocks retain-cycle

我有一个NSOperation的子类,它通过网络发送取消请求。 我想仅在请求成功时才取消操作:


// overrider cancel of NSOperation
-(void)cancel{
 [NSURLConnection sendAsynchronousRequest:request 
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
       [super cancel];
    }];
}

这会导致任何保留周期吗?我需要一个弱的超级(我正在使用ARC)

1 个答案:

答案 0 :(得分:3)

它不会创建保留周期,您的实例不会保留对完成块的强引用。但是,我不希望像这样调用super实现,可能是这样的

-(void)cancelAfterRequest 
{
    [NSURLConnection sendAsynchronousRequest:request 
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
         [self cancel];
    }];
}