如何通过初始化方法返回对象?

时间:2014-06-15 19:09:53

标签: objective-c

让我考虑一下代码:

Person *peter = [people chooseRandomPerson];

其中"人"是类实例,已经初始化,并且" chooseRandomPerson"是返回" Person"的对象的方法。类型。我想知道它是否与以下相同:

Person *peter = [[Person alloc] init];
peter = [people chooseRandomPerson];

如果没有,那有什么区别。如果没有,我可以随时使用这种替代吗?对不起,如果问题是基本的,但我无法找到答案。

2 个答案:

答案 0 :(得分:1)

第二个创建一个对象,将其放入变量peter,然后立即丢弃它*以存储chooseRandomPerson的返回值。

变量peter放置东西的地方;该对象来自alloc / initchooseRandomPerson 你得到的东西。你不需要创造一个东西,以便有一个地方放置它;声明Person *peter;自己创建了地方 - 变量。


*如果你没有使用ARC,这将是一个泄漏,但如果你问这个,你最好使用ARC。

答案 1 :(得分:0)

answer by Josh Caswell是正确的。但你的问题并不完全清楚。

在你的问题中,你永远不会定义什么是" people"。你说"类实例"你可能意味着"对象"。但是什么类的对象/实例?使用复数词" people"建议一组对象。你应该在你的问题中澄清这一点。

对象创建同级对象

如果您要求"对象是否可以返回其自己类的新实例?" ,答案是"是"。在你的例子中," peter"一个Person对象可以产生一个新的Person对象," Sally"。

但是,根据我的经验,创建兄弟对象(同一类的新对象)的对象有点不寻常。更常见的是使用Factory design pattern来生成实例。

创建兄弟对象的对象有一个常见用途:Immutable objects。而不是更改DateTime对象中的一个数据字段,而是创建一个全新的对象,其大部分数据基于原始数据。