鉴于以下情况:
- (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 implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior
根据我迄今为止的发现,大多数建议都包含以下内容:
- (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,这意味着wself
不能访问任何属性.
我想我的问题是:
- 我在乎吗?
- 我应该将myTimer声明为属性吗?
我在代码中经常使用IVAR.我刚刚在我的项目中添加了-Weverything
标志,以查看是否可以找到任何潜在问题,这是迄今为止最常见的警告.通过制作ivars属性,我可以解决这个问题,但我想确保在我这么做之前,我能更好地理解它.