打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
loadNibNamed后是否需要release IBOutlets

!!!!ARC下IBOutlet用weak还是strong

必须release所有IBOutlets,不管它是属性还是实例变量。

问题出现的背景

在做ThinkSNS iPhone客户端时(审核中),我使用IB制作TableViewCell(具体方法见这里的 第5条),所以会包含大量IBOutlets,其存在形式无非有两种:property或instance variable. 为了避免属性太多,我全部采用私有instance variable的形式使用IBOutlets。因为没有alloc、retain、copy等,所以我想当然的认为无需在dealloc中 release掉IBOutlets,最终导致app中有多处时隐时现的内存泄露。

通过各种调试才定位到问题的根源,即必须在dealloc中release掉所有IBOutlets。

原因分析

从nib中unarchived对象时,虽然系统会先init然后autorelease,但是UIKit在绑定IBOutlets时会将其retain count额外+1,所以我们需要手动release一次。

最佳实践

当加载nib文件、建立outlets时,其加载机制通常会使用accessor方法(如果存在的话),所以我们一般要以属性的方式(property)使用IBOutlets,不管你是iOS开发者还是Mac开发者。如对于iOS开发者:

 
@property (nonatomic, retain) IBOutlet UIUserInterfaceElementClass *anOutlet;

然后根据实际情况synthesize或者自己实现他们,最后一定要在dealloc中release.

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Ipad开发课程-Charpter3 输出和事件响应 ? 疯狂的老九
ios delegate你必须知道的事情
iOS:ARC相关知识,assign/copy/retain/strong/weak/readyonly/readwrite/nonatomic/atomic
理解 Objective
内存管理
ARC指南1
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服