在NSObject iOS中取消目标c块

时间:2014-01-12 05:29:52

标签: ios objective-c objective-c-blocks nsobject

我正在开发一款使用导航控制器的iOS应用。在几个视图控制器中,我创建了一个类Request的实例。在这个类中,我有一个具有块的方法:

- (void)submitRequest:(NSMutableDictionary *)dictionary
{
    [[API sharedInstance] commandWithParams:dictionary
                               onCompletion:^(NSDictionary *json) {
                                   if (!_canceled) {
                                       [self.delegate receivedRequest:json];
                                   }
                               }];
}

我遇到的问题是,如果由于导航导致UIViewControllers更改时收到了请求,则应用会崩溃。因此,当导航控制器更改视图控制器时,我想将取消设置为YES

如何在导航更改时取消请求?

1 个答案:

答案 0 :(得分:3)

- (void)submitRequest:(NSMutableDictionary *)dictionary
{
    __weak MyClass *weakSelf = self;
    [[API sharedInstance] commandWithParams:dictionary
                               onCompletion:^(NSDictionary *json) {
                                   if (!_canceled) {
                                       [weakSelf.delegate receivedRequest:json];
                                   }
                               }];
}

你的Block会捕获self,因此你可能会获得一个保留周期。使用弱引用来避免这种情况。