zoukankan      html  css  js  c++  java
  • 使用xib时IBOutlets变量是否需要release

    答案

    必须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开发者:

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

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

  • 相关阅读:
    UVALive 7509 Dome and Steles
    HDU 5884 Sort
    Gym 101194H Great Cells
    HDU 5451 Best Solver
    HDU 5883 The Best Path
    HDU 5875 Function
    卡特兰数
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    Spark Scala Flink版本对应关系
  • 原文地址:https://www.cnblogs.com/cnsec/p/11515838.html
Copyright © 2011-2022 走看看