考虑以下情况:
- (void) someMethod
{
dispatch_async(dispatch_get_main_queue(), ^{
myTimer = [NSTimer scheduledTimerWithTimeInterval: 60
target: self
selector: @selector(doSomething)
userInfo: nil
repeats: NO];
});
}
myTimer在私有接口中声明:
@interface MyClass()
{
NSTimer * myTimer;
}
@end
如何修复以下警告:
Block隐式保留'self'; 明确地提到'self'以指示这是预期的行为
根据我目前所找到的,大多数建议都涉及放置以下内容:
- (void) someMethod
{
__typeof__(self) __weak wself = self;
dispatch_async(dispatch_get_main_queue(), ^{
wself.myTimer = [NSTimer scheduledTimerWithTimeInterval: 60
target: self
selector: @selector(doSomething)
userInfo: nil
repeats: NO];
});
}
不过,我的myTimer是一个ivar,这意味着不能访问任何属性。
我想问的问题是:
- 我需要关注/在意吗?
- 我应该将myTimer声明为一个属性吗?
我在我的代码中经常使用ivars。 我刚刚向我的项目添加了“-Weverything”标志,以查看是否可以找到任何潜在的问题,这是迄今为止最常见的警告。 我没有问题通过使我的ivars成为属性来进行修复,但在这样做之前,我希望确保我能够更好地理解它们。