Objective-C2.0のNSTimer保持について
@interface AClass { NSTimer *timer; } @property (nonatomic,retain) NSTimer *timer; @end;
って宣言しといて
@implementation AClass @synthesize timer; -(id)init{ self = [super init]; timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(doSomething) userInfo:nil repeats:NO]; } @end
って保持したつもりになっていても、いつのまにやら解放されているようでエラーになることが多い。
プロパティ宣言のretainはガベージコレクタがある実行環境では意味がないし、[timer autorelease]を実行して、
autoreleasePoolにつっこんでも同じような状態だった
仕方がないので、CFRetain(timer)を実行して保持させた。忘れずにCFReleaseしなければならないが。。。
□autoreleaseについて
http://wwwa.dcns.ne.jp/~nito/CocoaClub/article03.html
NSTimerを保持するのはタブーなのかな、、
[追記]
NSTimerは、自動的に解放されるというふうにリファレンスに記載されているが、
NSTimerが働いている時に割り込みをかけて、タイマー処理を中断したい場合には、インスタンス変数として保持しておかないと
いけないと思うんだけど、、。
if(timer && [timer isValid]) [timer invalidate]