liulunet

成长记录

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

IOS中的objective-c采用引用计数方式管理内存,最近在写动画效果的时候遇到了内存泄露问题。

关于对象的delegate声明,在objective-c的编程指南中推荐的是使用assign来声明,如果才用retain等增加引用计数的声明方式,管理不当就很容易出现循环引用问题,造成内存无法被释放。但这次写动画发现一个例外,即CABasicAnimation的delegate在赋值时会将对象的引用计数加一。当CABasicAnimation的removeOnCompletion为NO时,动画结束以后并不会被移除,最终形成一个循环引用,对象无法被释放掉。在指定了Animation的delegate后,不要将动画的removeOnCompletion设置为NO。在不确定动画是否执行完成时,最好调用CALayer的removeAnimationForKey方法将动画手动移除。参考:CABasicAnimation的delegate

关于延迟执行方法-(void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimerInterval)delay;在调用时同样会将调用它的NSObject的引用计数加1,在需要释放内存之前,需要调用对应的+(void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;方法,将队列中的请求清空。

posted on 2013-01-26 17:16  liulunet  阅读(1415)  评论(0编辑  收藏  举报