Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 工厂方法和施工人员之间的差异_Objective C_Swift_Constructor_Initializer_Factory Method - Fatal编程技术网

Objective c 工厂方法和施工人员之间的差异

Objective c 工厂方法和施工人员之间的差异,objective-c,swift,constructor,initializer,factory-method,Objective C,Swift,Constructor,Initializer,Factory Method,目前学习目标明确,速度快。我了解Obj C中的初始化器和方便初始化器,我了解工厂方法。我也听说过“构造函数”这个术语,但我不确定它们与工厂方法或初始值设定项有何区别。“构造函数”只是引用初始化器的另一种方式吗?谢谢没有区别 长期以来,创建实例对象的类方法一直被称为方便分配器或(很少)构造函数。术语便利分配器经常被使用,当实例对象被自动删除时,什么对ARC变得不重要 NSString *string1 = [NSString string]; // autoreleased NSString *s

目前学习目标明确,速度快。我了解Obj C中的初始化器和方便初始化器,我了解工厂方法。我也听说过“构造函数”这个术语,但我不确定它们与工厂方法或初始值设定项有何区别。“构造函数”只是引用初始化器的另一种方式吗?谢谢

没有区别

长期以来,创建实例对象的类方法一直被称为方便分配器或(很少)构造函数。术语便利分配器经常被使用,当实例对象被自动删除时,什么对ARC变得不重要

NSString *string1 = [NSString string]; // autoreleased
NSString *string2 = [NSSString new];   // ownership transfer
基本上,它们是
+alloc
-init…
加上的组合–当它是一个方便的分配器时–
-autorelease
。大约两年前,他们开始称之为因子方法

但是,忘记名字吧。想想它们是做什么的以及它们存在的原因:使用经典的
+alloc
-
-init…
组合,类没有机会决定要创建什么子类型,因为这取决于
-init
的参数。让我们举个例子:
NSSArray
有两个(私有)子类
\u NSSmallArray
\u NSBigArray
。它希望从您在
-initWithEstimatedSize:
方法上作为容量给出的估计大小中选择子类型。
+alloc
如何决定选择和分配哪个子类型?它不知道您将在init方法上传递什么参数

使用构造函数或方便的分配器,对象分配可以参数化
+newArrayWithEstimatedSize:
+arrayWithEstimatedSize:
可以解决该问题


呃,现在你要叫它们工厂方法。很抱歉故事是一样的。

这被标记为[swift],不太清楚OP是否真的在寻找swift信息,但可能值得注意的是swift确实如此,swift中的“初始值设定项”涵盖了ObjC中使用“构造函数”的功能。它被标记为swift和Objective-C。因为swift中的概念是从Objective-C借来的,你可以用Objective-C来描述,剩下的就是最后三段提到的措辞。