我已经在Objective-C中编写了几个月的编码,而且我注意到有时会使用init方法对类进行实例化(如文档所推荐)。因此,必须首先分配,然后是init。 [[Example Class Alloc] initWithProperty1:andTwo:]。但是,有时文档建议使用"工厂方法"作为建设者。例如[NSArray arrayWithObjects:__]。
似乎使用工厂/类方法可以在幕后完成分配,实际方法与init,AFAIK无法区分。
因此,选择一个而不是另一个的实际原因是什么?我对这两者的分析是否几乎相同甚至是正确的?
答案 0 :(得分:2)
我建议使用工厂方法,如果有的话可以满足您的需要。除了句法糖(更短),对象的所有权也有差异(因此谁应该释放它)。如果你使用ARC,你不应该担心内存。
工厂方法可以简单方便。他们不能 只合并分配和初始化,但分配可以 通知初始化。举个例子,假设你必须这样做 从编码的属性列表文件初始化集合对象 集合的任意数量的元素(NSString对象,NSData 对象,NSNumber对象等)。在工厂方法之前可以 知道要为集合分配多少内存,它必须阅读 文件并解析属性列表以确定那里有多少元素 是和这些元素的对象类型。
这有点神秘,但请考虑这样的用例:您希望用文件内容填充NSMutableArray
。如果选择" alloc和init",操作系统必须不断分配新内存,以便在从文件中读取附加数据时存储附加数据。类方法需要首先解析文件,因此它知道有多少行以及它应该一次性请求的内存大小。