在objective-c中使用块进行recursion

在执行涉及objective-c块的recursion时,我正在接收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块被调用,这工作正常。

但是如果出现了问题, 有问题的方法需要再次调用(recursion部分),当第一次发生这种情况时,我立即得到EXC_BAD_ACCESS信号。

任何forms的帮助将不胜感激。

你怎么创build你的区块? 请记住,您必须将其从堆栈移动到堆。

例:

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

[self problematicMethod:friendInfo onCompleteBlock];

如果response.status值是ISNT_OK,则永远不会完成recursion调用该函数。