:NSTimersを結合参照として使用するには?私は次のことを試してみた
しかし- (void)setupTimer {
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(doSomething) userInfo:nil repeats:YES];
objc_setAssociatedObject(self, &key, timer, OBJC_ASSOCIATION_RETAIN);
[timer invalidate];
}
- (void)doSomething { /* ... */ }
- (void)afterDoingSomething { [objc_getAssociatedObject(self, &key) invalidate]; }
、タイマーは(私はそれがそうすることを期待しませんでした。このコードは、ちょうど私に多くの権利を見ていない)ダニいない何らかの理由。それを作る方法はありますか...働くのですか?
はい、そうです。私は私の連想参照内のタイマーを保持している場合、私はタイマーを処分しなかった場合私は漏れていないだろうか? – Matoe
'-invalidate'はメモリ管理とは関係ありません。タイマーを解除して起動しないようにします。 'release'と同じことではありません。次に、 '-scheduledTimerWithTimeInterval:...'メソッドは自動解放されたインスタンスを返すので、解放する責任はありません。タイマーが終了したら、 '-afterDoingSomething'で連想参照を取り除くべきです。これを行うには、 'objc_setAssociatedObject()'をnilでもう一度呼び出します。連想参照関数はそれを行うため、タイマーでreleaseを呼び出す必要はありません。 ObjCのメモリ管理をレビューするのに良いかもしれない... –