让我考虑一下代码:
Person *peter = [people chooseRandomPerson];
其中"人"是类实例,已经初始化,并且" chooseRandomPerson"是返回" Person"的对象的方法。类型。我想知道它是否与以下相同:
Person *peter = [[Person alloc] init];
peter = [people chooseRandomPerson];
如果没有,那有什么区别。如果没有,我可以随时使用这种替代吗?对不起,如果问题是基本的,但我无法找到答案。
答案 0 :(得分:1)
第二个创建一个对象,将其放入变量peter
,然后立即丢弃它*以存储chooseRandomPerson
的返回值。
变量peter
是放置东西的地方;该对象来自alloc
/ init
或chooseRandomPerson
你得到的东西。你不需要创造一个东西,以便有一个地方放置它;声明Person *peter;
自己创建了地方 - 变量。
*如果你没有使用ARC,这将是一个泄漏,但如果你问这个,你最好使用ARC。
答案 1 :(得分:0)
answer by Josh Caswell是正确的。但你的问题并不完全清楚。
在你的问题中,你永远不会定义什么是" people"。你说"类实例"你可能意味着"对象"。但是什么类的对象/实例?使用复数词" people"建议一组对象。你应该在你的问题中澄清这一点。
如果您要求"对象是否可以返回其自己类的新实例?" ,答案是"是"。在你的例子中," peter"一个Person对象可以产生一个新的Person对象," Sally"。
但是,根据我的经验,创建兄弟对象(同一类的新对象)的对象有点不寻常。更常见的是使用Factory design pattern来生成实例。
创建兄弟对象的对象有一个常见用途:Immutable objects。而不是更改DateTime对象中的一个数据字段,而是创建一个全新的对象,其大部分数据基于原始数据。