gpt4 book ai didi

objective-c - objective-c 中的 block 递归

转载 作者:搜寻专家 更新时间:2023-10-30 20:20:56 25 4
gpt4 key购买 nike

在执行涉及 Objective-C block 的递归时,我在我的 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;
}
}];
}

基本上,problematicMethod 在此简化版本中调用 doSomethingWithFriend:onComplete:。当该方法完成时 (onComplete),并且如果一切正常,将调用原始的 onComplete1 block ,并且工作正常。

但如果出现问题,problematicMethod 需要再次调用(递归部分),当这种情况第一次发生时,我会立即收到 EXC_BAD_ACCESS 信号。

如有任何帮助,我们将不胜感激。

最佳答案

你是如何创建你的区 block 的?请记住,您必须将它从堆栈移动到堆。

例子:

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

<p>[self problematicMethod:friendInfo onCompleteBlock];</p>

关于objective-c - objective-c 中的 block 递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11428531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com