-1

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

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

4

3 回答 3

2

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

对象的典型设置类似于:

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

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

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

NSArray *arr = [NSArray array];

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

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

于 2013-02-06T10:16:52.933 回答
1

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

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

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

一般来说,我会建议使用 ARC 而不会被这些问题所困扰..

于 2013-02-06T10:22:01.607 回答
0

我不完全是一个objective-c的人,但我不认为你调用alloc任何对象,你在一个类上调用它来分配对象并调用init新分配的对象。

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

于 2013-02-06T10:17:02.627 回答