【问题标题】:ObjC-Why it is incorrect when implement [alloc] and [init] methods separatly? [duplicate]ObjC-为什么分开实现[alloc]和[init]方法不正确? [复制]
【发布时间】:2012-11-09 02:42:46
【问题描述】:

在未重新分配指向该对象的任何指针的情况下,切勿初始化对象。例如,不要这样做:

NSObject *someObject = [NSObject alloc];
[someObject init];

如果对 init 的调用返回一些其他对象,您将得到一个指向最初分配但从未初始化的对象的指针。

其实这是Apple的ObjC文档中的一个例子,不过我不太清楚,就是为什么NSObject *someObject = [[NSObject alloc] init]可以承诺返回我们刚需要的对象,而NSObject *someObject = [NSObject alloc]; [someObject init];不能?

【问题讨论】:

  • 每当我需要做 [[.... alloc]init] 时,我更喜欢 [... new]。节省打字和代码看起来更小。如果你需要做 initWith... 那就别无选择了。
  • zh, [[... alloc] init] 等价于 [... new],如果您只需要一个 init-only 对象,它将实例变量值设置为 0,如果有任何。

标签: objective-c init alloc


【解决方案1】:

仅仅因为 -init 可能返回与 someObject 不同的东西。在您的示例中,您必须将指针重新分配给-init 的结果。

【讨论】:

  • 但是它何时以及如何返回与 someObject 不同的东西呢?以及如何在 alloc init 分隔版本中重新分配指向 -init 结果的指针?
  • 我已经知道这个问题的答案了,多么愚蠢的问题......
猜你喜欢
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 2012-11-19
  • 2012-06-30
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多