多次调用“init”方法是错误的

时间:2010-09-13 00:32:27

标签: objective-c

如果我正在获取数据更新 - 例如,让我们说一些新的返回JSON - 那么人们认为什么更干净?

a)只需释放任何旧对象,然后创建新对象。

b)具有 - (id)initWithJSON:json类型初始值设定项,可以“重置”对象中包含的数据以使用传入的新数据。

第二种情况意味着多次调用“init”方法并编码它们以便小心释放/复制包含的对象。

2 个答案:

答案 0 :(得分:3)

(a)肯定更好。通常,使用不可变而不是可变数据结构的算法更容易编写和推理。如果分析表明(a)不可行,那么(并且只有那时)考虑(b)。如果你沿着这条路前进,那么你的未来维护者是一个忙,并使用resetWithJSON:或某种方法。您可以在init和reset方法之间提取公共代码,但是让您的公共API使用这两种方法,以便明确您的意图。

答案 1 :(得分:2)

巴里已经回答了,但让我用不同的方式说出来:

绝对是a)是通常的方法。

您可以按照b)中的建议重复使用该对象,但是当您这样做时,永远不会设计您的类,以便您不止一次调用名为 init... 的方法即可。这违背了Objective-C的每一个既定习惯。

NSMutableString为例。您可以使用

初始化一个
  NSMutableString* ms=[[NSMutableString alloc] initWithString:@"boo"];

你可以通过加密来重置它

  [ms setString:@"bar"];

你永远不会

  [ms initWithString:@"boo"];

名为init...的方法只应与alloc一起使用,而不应与其他任何地方一起使用。