在创建新对象时何时需要调用alloc

时间:2013-02-06 10:12:30

标签: objective-c memory-management allocation

我了解引用计数和“拥有对象”的整个业务,如果你在Objective-c中分配一个对象,你有责任发布它

但是,您究竟需要在新创建的对象上调用alloc吗?它只是在范围结束后保留​​引用还是有其他原因

3 个答案:

答案 0 :(得分:2)

您需要调用alloc以便为对象分配内存。

对象的典型设置如下:

Object *obj = [[Object alloc] init];

alloc调用为对象分配内存,init调用将其初始化(为所有属性/属性提供合理的默认值)。

某些对象类型带有工厂方法,例如

NSArray *arr = [NSArray array];

在这种情况下,对象由单个数组调用初始化并分配。

除了不同的所有权规则通常适用于这两种方法之外,这些都没有(直接)与引用计数有关。

答案 1 :(得分:1)

我认为你误解了一个基本概念。将alloc发送给类将导致创建一个您拥有的类(尚未初始化)的新对象(保留计数将为1)。

从你的问题“你究竟什么时候需要在新创建的对象上调用alloc?” - 如果对象是新创建的,则意味着有人已经分配了它..

如果你的意思是:你什么时候需要在新创建的对象上调用retain?答案是,如果你想自己持有它而不是依赖任何人分配它,并且可能会在某个时候释放它。记住,alloc / new语法将retain count提高一,其他创建方法(如[NSArray array])返回自动释放对象..

总的来说,我会建议使用ARC,而不是被这些问题困扰..

答案 2 :(得分:0)

我不是一个客观的人,但我不认为你在任何对象上调用alloc,你在一个类上调用它来分配对象并在其上调用init新分配的对象。

如果这是您的设置,您可能希望retain在自动释放池执行release后保留引用。这通常发生在使用[NSThing thingWithStuff:stuff]或某些此类创建的对象上。