Sno*_*man 1 cocoa memory-leaks objective-c nstimer foundation
每当我想制作一个计时器时,我就是:
[NSTimer scheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(someMethod)
userInfo:nil
repeats:NO];
Run Code Online (Sandbox Code Playgroud)
而不是
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(someMethod)
userInfo:nil
repeats:NO];
Run Code Online (Sandbox Code Playgroud)
第一个是内存泄漏吗?使用它们的正确方法是什么?
在任何一个片段中都没有内存问题; 您只需要选择与计时器交互的需求.
当您安排一个计时器,运行循环保留它,到计时器的引用它触发时一起传递及其选择-例如,(void) doTimerThing: (NSTimer *)tim1 -被使用,所以它不是严格必要的,你把它放到变量并自己保留.Apple 在Timer Programming Topics文档的"Memory Management"部分清楚地解释了这一点.
但是,如果您可能希望在计时器触发之前使其无效(或者在重复计时器的触发之间),则需要对其进行引用.在这种情况下,呼吁retain它也是一个好主意.该scheduledTimerWithTimeInterval:target:...方法返回一个您不拥有的对象,您不应该假设您不拥有的对象的内存状态(包括它们是否在自动释放池中,或者运行循环将保持多长时间)计时器周围).如果你需要定时器(或任何物体),你应该通过调用来声明它的所有权retain.
1请注意,计时器的方法应始终有一个参数 ; 您的代码段中的选择器看起来像是一个没有的方法.计时器似乎以这种方式工作,但是你的操作与文档化的界面相反.
| 归档时间: |
|
| 查看次数: |
941 次 |
| 最近记录: |