簡體   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