保留由类方法创建的对象?

时间:2011-01-26 16:35:42

标签: iphone objective-c cocoa-touch

这可能是我现在应该知道的,我正在使用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];

2 个答案:

答案 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 = …即可使用设置器。