这可能是我现在应该知道的,我正在使用NSTimer类方法创建NSTimer的实例。我很确定返回的对象是自动释放的,我的问题是在内存管理方面我应该保留并释放计时器对象( METHOD:1 ),或者只是直接将它分配给@属性(方法:2 )(或者我应该做一些完全不同的事情?)
// METHOD: 1
@property (nonatomic, retain) NSTimer *myTimer;
NSTimer *tempTimer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(executeOnTimer) userInfo:nil repeats:YES];
[self setMyTimer:tempTimer];
//[tempTimer release];
- (void)dealloc {
[pulseTimer release];
[super dealloc];
}
或简单:
// METHOD: 2
myTimer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(executeOnTimer) userInfo:nil repeats:YES];
最后一点,如果我只是编写(见下文)而没有分配属性,那么计时器是否有可能被取消分配,基本上它会一直存在,直到程序退出。只是好奇它是如何保留的?
[NSTimer scheduledTimerWithTimeInterval:120.0 target:self selector:@selector(executeOnTimer) userInfo:nil repeats:YES];
答案 0 :(得分:2)
为了取得对NSTimer的所有权,您可以使用相同的效果执行其中一项操作:
self.myTimer = [NSTimer scheduledTimerWithTimeInterval: ...]; // implicit setter
或
[self setMyTimer: [NSTimer scheduledTimerWithTimeInterval:...]]; // explicit setter
或
myTimer = [[NSTimer scheduledTimerWithTimeInterval: ...] retain];
或
self->myTimer = [[NSTimer scheduledTimerWithTimeInterval: ...] retain];
答案 1 :(得分:1)
这是好方法:
self.myTimer = tempTimer;
// don't call [tempTimer release]
由于保留它的财产,这将自动保留。
在myTimer = …
执行时,只需拨打self.myTimer = …
即可使用设置器。