默认情况下,按方法alloc
或copy
返回的对象的retain count
等于1,因此您必须自行释放。
但是通过NSTimer样本代码
// in one method start the timer (which myTimer is an Class Instance) myTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(method:) userInfo:nil repeats:YES]; // in another method [myTimer invalidate]; myTimer = nil;
我的问题是为什么[NSTimer sche **]返回一个你不需要保留的对象,但你可以在任何地方访问它。你不需要发布它,只需要在它上面调用invalidate
。
答案 0 :(得分:4)
实例保留在分配给它的运行循环中。 保留计数保持在零以上,直到运行循环释放它。 因此,您可以访问该对象,直到发生这种情况。
来自NSTimer docs:
计时器与run一起工作 循环。要有效地使用计时器,你 应该知道如何运行循环 操作 - 参见NSRunLoop和线程 编程指南。请特别注意 运行循环保留其计时器,所以 你有可以释放计时器 将它添加到运行循环中。
然后具体说:
使用 scheduledTimerWithTimeInterval:调用:重复: 要么 scheduledTimerWithTimeInterval:目标:选择器:USERINFO:重复: class方法来创建计时器和 在当前的运行循环中安排它 默认模式。
因此,您使用的方法可以自动处理当前的运行循环。