gpt4 book ai didi

ios - 创建一个 block 并将其命名为输入 block ?

转载 作者:行者123 更新时间:2023-11-29 04:06:14 25 4
gpt4 key购买 nike

我最近被“分配”到一段代码,其中以下代码被标记为#warning内存泄漏

- (void)aMethodWithCallback:(BlockType)completedBlock {
/* Do stuff */
completedBlock = ^(Class1 *obj, NSError *error) {
/* Do stuff */
#warning memory leak
if (completedBlock) {
completedBlock(obj, error);
}
};

[self callAnotherMethodWithCallback::completedBlock];
}

我不知道该怎么处理它,创建一个名称为输入 block 的 block 看起来很奇怪,但它似乎有效。 为什么上面的代码很危险?

编辑ARC 已启用。

将代码更改为这样,似乎不再泄漏:

- (void)aMethodWithCallback:(BlockType)completedBlock {
/* Do stuff */
BlockType completedBlock2 = ^(Class1 *obj, NSError *error) {
/* Do stuff */
if (completedBlock) {
completedBlock(obj, error);
}
};

[self callAnotherMethodWithCallback::completedBlock2];
}

最佳答案

 - (void)aMethodWithCallback:(BlockType)completedBlock {
id obj = nil;
NSError error = nil;
/* make your stuff with obj and error*/

if (completedBlock)
completedBlock(obj, error);

[self callAnotherMethodWithCallback::completedBlock];
}

或者您将在每次调用该方法时重写该变量。

关于ios - 创建一个 block 并将其命名为输入 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15158320/

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