Учитывая следующее:
- (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 как свойство?
Я использую ivars совсем немного через свой код. Я просто добавил флаг -Weverything
в свой проект, чтобы узнать, могу ли я найти какие-либо основные проблемы, и это, безусловно, самое распространенное предупреждение. У меня нет проблем, хотя и исправляю его, создавая свойства ivars, но я хочу убедиться, что я получу лучшее понимание, прежде чем я это сделаю.