如果我有一个采用对象参数的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/