在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调用该函数。