如果我有一个采用对象参数的Objective-C方法,并且该方法使用一个块在内部进行工作,是否有办法从该块内修改该对象?

据我了解,块通过在块中引用变量来从其父作用域中捕获变量,并且默认情况下将它们复制。而且,如果我希望能够修改而不是使用周围对象的副本,则可以在它的声明前加上__block前缀,但是由于我自己没有声明它,所以无法使用方法参数来声明它,对吗?

例如:

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

最佳答案

您所说的捕获是正确的;您可能想要做的就是提供应该作为块主题的对象作为其参数,就像调用C函数一样。所以

void (^ someBlock)(NSString *) =
    ^(NSString *someString)
    {
        NSLog(@"length is %d", [someString length]);
    };

...

someBlock(@"String 1");
someBlock(@"A second string");

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

10-13 06:59