进行涉及Objective-C块的递归时,我在iOS应用程序中收到EXC_BAD_ACCESS信号。这是简化的代码:

- (void)problematicMethod:(FriendInfo*)friendInfo onComplete:(void(^)(NSString*))onComplete1 {

[self doSomethingWithFriend:friendInfo onComplete:^(Response* response) {
    switch (response.status) {
        case IS_OK:
            onComplete1(message);
            break;

        case ISNT_OK:
            // Recursively calls the method until a different response is received
            [self problematicMethod:friendInfo onComplete:onComplete1];
            break;

        default:
            break;
    }
}];
}

因此,基本上,在此简化版本中,有问题的方法调用doSomethingWithFriend:onComplete:。当该方法完成时(onComplete),并且一切正常,则将调用原始的onComplete1块,并且可以正常工作。

但是,如果出现问题,则需要再次调用problematicMethod(递归部分),并且在第一次发生这种情况时,我立即获得EXC_BAD_ACCESS信号。

任何形式的帮助将不胜感激。

最佳答案

您如何创建区块?请记住,您必须将其从堆栈移动到堆。

例:

 void(^onCompleteBlock)(NSString*) = [[^(NSString* param) {
  //...block code
}] copy] autorelease];

[self problematicMethod:friendInfo onCompleteBlock];

09-07 01:30