mac开发系列13:NSTimer中可能隐藏的循环引用

我们知道,循环引用指的是双方直接或者间接持有(retain)对方,形成“持有环”,导致双方都不能被正确释放(release),进而引发内存泄漏甚至更严重的后果。

NSTimer(计时器)常常被用来执行一些定时重复的任务,api如下:

  • (NSTimer *)scheduledTimerWithTimeInterval:
    (NSTimeInterval)seconds //重复任务的时间间隔
    target:(id)target //计时器调用的对象
    selector:(SEL)selector //计时器调用对象上的方法,包含具体任务内容
    userInfo:(id)userInfo
    repeats:(BOOL)repeats //YES表示重复执行任务
    从api可以看出,NSTimer将持有target,直到NSTimer失效(对于重复计时器而言,要调用invalidate方法使其失效)。

当target=self,而NSTimer又是保存在self的实例变量中,这样target就会间接持有NSTimer。这样,就产生了“持有环”。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容