繁体   English   中英

iOS块 - 使用未声明的标识符self

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM