gpt4 book ai didi

cocoa - 为什么在 Objective-C 中使用 initWith.. 方法而不是 "class/factory methods"?

转载 作者:行者123 更新时间:2023-12-03 17:02:09 26 4
gpt4 key购买 nike

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

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

因此,选择其中一种而不是另一种的实际原因是什么?我对两者几乎相同的分析是否正确?

最佳答案

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

来自Apple's documentation :

Factory methods can be more than a simple convenience. They can not only combine allocation and initialization, but the allocation can inform the initialization. As an example, let’s say you must initialize a collection object from a property-list file that encodes any number of elements for the collection (NSString objects, NSData objects, NSNumber objects, and so on). Before the factory method can know how much memory to allocate for the collection, it must read the file and parse the property list to determine how many elements there are and what object type these elements are.

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

关于cocoa - 为什么在 Objective-C 中使用 initWith.. 方法而不是 "class/factory methods"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31221850/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com