gpt4 book ai didi

objective-c - 如何在 block 中修改 ObjC 方法的参数?

转载 作者:太空狗 更新时间:2023-10-30 03:44:35 24 4
gpt4 key购买 nike

如果我有一个接受对象参数的 Objective-C 方法,并且所述方法使用一个 block 在内部完成它的工作,有没有办法从 block 内修改该对象?

据我了解, block 通过在 block 内引用它们来从其父作用域捕获变量,并且默认情况下会复制它们。如果我希望能够修改而不是使用周围对象的副本,我可以在其声明前加上 __block,但我无法使用方法参数这样做,因为我没有不要自己申报,对吧?

例如:

- (void)doWorkWithString:(NSString *)someString
{
[NSFoo doAwesomeClassMethodWithBlock:^{
// How can I modify someString here directly?
// By just changing someString, I'm changing the captured copy
}];
}

最佳答案

“接受一个对象参数”

首先,您几乎肯定对不能拥有对象类型的参数或变量这一事实感到困惑。您只能拥有指向对象的指针。所以是的, block 捕获的非 __block 变量被 block 复制。但是这里的变量要么是原始类型,要么是对象指针,而不是“对象”。

如果你只需要改变一个对象指针指向的对象,而不涉及改变指向另一个对象的指针,那么你就没有改变变量。由于您没有更改变量,因此所有这些“复制变量”和 __block 的东西都是完全不相关的。

关于objective-c - 如何在 block 中修改 ObjC 方法的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13355882/

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