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