我了解引用计数和“拥有对象”的整个业务,如果你在Objective-c中分配一个对象,你有责任发布它
但是,您究竟需要在新创建的对象上调用alloc吗?它只是在范围结束后保留引用还是有其他原因
答案 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]
或某些此类创建的对象上。