在我的應用我有下面的代碼段:編寫等效代碼爲iOS中9
__weak __typeof(self)weakSelf = self;
_pingTimer = [NSTimer scheduledTimerWithTimeInterval:5.0
repeats:YES
block:^(NSTimer * _Nonnull timer)
{
__strong __typeof(weakSelf)strongSelf = weakSelf;
[strongSelf pingWithBlock:nil];
}];
這完全在iOS的10+,但我需要的應用程序支持的iOS 9爲好。所以我需要提供一種適用於兩者的方法。
我嘗試這樣做:
__weak __typeof(self)weakSelf = self;
_pingTimer = [NSTimer scheduledTimerWithTimeInterval:5.0
target:weakSelf
selector:@selector(pingWithBlock:)
userInfo:nil
repeats:YES];
pingWithBlock方法是在同一個類中定義的,它是一個實例方法。
但是,這似乎不工作,這意味着我得到一個不好的內存訪問崩潰。
如果有人有任何建議,將不勝感激。
編輯:下面 感謝@dgatwood解釋代碼修復該問題
- (void)autoPing
{
_pingTimer = [NSTimer scheduledTimerWithTimeInterval:self.autoCheckInterval
target:self
selector:@selector(pingWithBlock)
userInfo:nil
repeats:YES];
}
-(void)pingWithBlock
{
[self pingWithBlock:nil];
}
你的'pingWithBlock:'方法在哪裏?並定義「不起作用」。 – rmaddy
剛剛更新了我的問題 –
不要編輯你的問題的答案。發佈實際的答案。 – rmaddy