现在的位置: 首页 > 综合 > 正文

IOS内存引用计数笔记

2012年08月30日 ⁄ 综合 ⁄ 共 639字 ⁄ 字号 评论关闭

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;方法,将队列中的请求清空。

抱歉!评论已关闭.