【问题标题】:Why use initWith.. methods as opposed to "class/factory methods" in Objective-C?为什么在 Objective-C 中使用 initWith.. 方法而不是“类/工厂方法”?
【发布时间】:2015-07-05 01:16:02
【问题描述】:

我已经用 Objective-C 编写代码几个月了,我注意到有时会使用 init 方法实例化一个类(如文档所推荐的那样)。因此,必须先分配,然后再初始化。 [[示例类 Alloc] initWithProperty1:andTwo:]。但是,有时文档建议使用“工厂方法”作为构造函数。如[NSArray arrayWithObjects:__]。

似乎使用工厂/类方法可以在幕后完成分配,并且实际方法与 init AFAIK 无法区分。

因此,偏爱其中一个的实际原因是什么?我对两者几乎相同的分析是否正确?

【问题讨论】:

    标签: cocoa constructor


    【解决方案1】:

    如果有一种方法可以满足您的需求,我建议使用工厂方法。除了语法糖(更短)之外,对象的所有权(以及谁应该释放它)也存在差异。如果您使用 ARC,则不必担心内存问题。

    来自Apple's documentation

    工厂方法不仅仅是一种简单的方便。他们不能 只结合了分配和初始化,但是分配可以 通知初始化。例如,假设您必须 从编码的属性列表文件初始化集合对象 集合的任意数量的元素(NSString 对象,NSData 对象、NSNumber 对象等)。之前工厂方法可以 知道要为集合分配多少内存,它必须读取 文件并解析属性列表以确定有多少元素 这些元素是什么以及这些元素是什么对象类型。

    这有点神秘,但考虑这样的用例:您想用文件的内容填充NSMutableArray。如果您选择“alloc and init”,操作系统必须不断分配新内存来存储您从文件中读取的附加数据。类方法需要先解析文件,所以它知道有多少行,一次需要多少内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多