[英]iOS Blocks - use of undeclared identifier self
我是块新手。 我在一个单身人士里,我这样做
void (^ myBlock)() = ^(){ [self doStuff]; };
我收到此错误使用未声明的标识符self。
doStuff是单例内部的一个方法。
但是如果在另一个方法中声明了这个块,Xcode就可以了。
这是为什么? 谢谢。
您可以在界面中定义块并在@implementation文件中的任何方法(包括初始化器)中初始化,如下所示:
@interface YourClass {
void (^ myBlock)();
}
@implementation YourClass
- (void)yourMethod {
myBlock = ^(){ [self doStuff]; };
}
@end
你不应该直接在一个区块中调用self
。
相反,你应该从self
做一个安全的块指针并在你的块内访问它。
__block id safeBlockSelf = self;
void (^ myBlock)() = ^(){ [safeBlockSelf doSomething]; };
请参阅实施API时如何避免在块中捕获self? 更多细节。
因为每个方法都作为隐藏的参数传递给自己。 self是一个与其他变量一样的变量,如果在方法中,块可以“看到它/捕获它”
如果它不在方法中,则self不是任何位置的变量集,并且块不能“看到它”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.