【问题标题】:What's the point of this in objective-c这在objective-c中有什么意义
【发布时间】:2010-11-15 16:37:24
【问题描述】:
SomeObject *temp = [[SomeObject alloc] init]
self.theObject = temp;
[temp release];

为什么总是这样?为什么不

self.theObject = [[SomeObject alloc] init];

【问题讨论】:

    标签: iphone objective-c properties object-initialization


    【解决方案1】:

    如果theObject属性是保留属性,第一种方法是正确的,因为它不会泄漏内存。它也比编写第二个版本的正确方法更有效,即:

    self.theObject = [[[SomeObject alloc] init] autorelease];
    

    每当您使用alloc 创建对象时,您都负责以某种方式释放它,无论是通过release 还是autorelease

    【讨论】:

    • 从技术上讲,创建对象的是 alloc,因此需要释放,而不是 init。
    • 是的,我也注意到了。不过谢谢。我现在真的开始欣赏其他语言的垃圾收集了。
    • Objective-C 确实具有垃圾收集功能,但它在 iPhone 上不存在,因为它的计算量更大,并且会对性能和电池寿命产生(轻微?)影响。
    • 这是在 iPhone 上没有内存管理的技术方面 - 另一方面是它迫使开发人员编写内存意识和高效的代码。那些在审核期间没有更明显标记并被拒绝的人。
    【解决方案2】:

    第二个版本泄露了 SomeObject 实例,因为 self.theObject 将调用一个设置器,如果编写得当,它会保留该对象。

    你可以这样做

    theObject = [[SomeObject alloc] init];
    

    有些人当然会这样做。不过,其他人更喜欢始终使用访问器,无论是为了一致性还是为了避免访问器有副作用时出现错误(例如,您将绕过 KVO 通知,如果它不是 init 方法的一部分,这可能是一个问题)。

    【讨论】:

      猜你喜欢
      • 2012-05-29
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多