【问题标题】:Why using 'nil' after releasing objects为什么在释放对象后使用'nil'
【发布时间】:2011-12-28 09:31:22
【问题描述】:

有时我在 Objective-c 中看到了这种类型的编码。为什么释放后设置_imageView为nil。

 - (void)dealloc {
    [_imageView release];
    _imageView = nil;
    [super dealloc];
 }

【问题讨论】:

    标签: objective-c release


    【解决方案1】:

    这是为了确保您不会尝试重复使用刚刚发布的对象。

    通过将其设置为 nil,您可以确保将来发送给它的任何消息都将被丢弃(标准 nil 对象的行为)而不是引起问题。

    【讨论】:

    • 在旁注中,通常不需要在 dealloc 方法中将 ivar 设置为 nil。除非有人对超类 ivars 做一些骇人听闻的事情。
    【解决方案2】:

    只是因为这是安全的做法。

    在 dealloc 中,除非您使用线程,否则它实际上并没有多大意义,但除此之外,每次将 nil 分配给对象时都这样做总是好的(除非它是一个属性)。

    【讨论】:

      【解决方案3】:

      据我了解,在 dealloc 中没有必要。但是,当在任何其他方法中释放对象时,指针仍将保留,但它指向的对象将不再存在,从而在向其发送消息时导致崩溃。

      通过将指针设置为 nil,您可以确保发送给它的任何消息都将被忽略,而不是使您的应用程序崩溃(或导致奇怪的行为)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-18
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多