Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 创建新对象时,何时需要调用alloc_Objective C_Memory Management_Allocation - Fatal编程技术网

Objective c 创建新对象时,何时需要调用alloc

Objective c 创建新对象时,何时需要调用alloc,objective-c,memory-management,allocation,Objective C,Memory Management,Allocation,我了解关于引用计数和拥有对象的整个业务,如果您在Objective-c中分配对象,则您有责任释放它 但是,您需要在什么时候对新创建的对象调用alloc?是否仅在作用域结束后保留引用,或者是否有其他原因您需要调用alloc以便为对象分配内存 对象的典型设置如下所示: Object *obj = [[Object alloc] init]; alloc调用为对象分配内存,init调用初始化对象,并为其提供所有属性/属性的合理默认值 一些对象类型与工厂方法一起提供,例如 NSArray *arr =

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


但是,您需要在什么时候对新创建的对象调用alloc?是否仅在作用域结束后保留引用,或者是否有其他原因

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

对象的典型设置如下所示:

Object *obj = [[Object alloc] init];
alloc调用为对象分配内存,init调用初始化对象,并为其提供所有属性/属性的合理默认值

一些对象类型与工厂方法一起提供,例如

NSArray *arr = [NSArray array];
在这种情况下,通过单个数组调用初始化和分配对象


所有这些都与引用计数没有直接关系,只是这两种方法通常适用不同的所有权规则。

我并不是一个完全支持objective-c的人,但我认为您不会对任何对象调用alloc,而是对类调用alloc来分配对象,并对新分配的对象调用init


如果这是您的设置,您可能希望在autorelease池执行发布后保留引用。这种情况经常发生在使用[NSThing thingwithstaff:stuff]或类似工具创建的对象上。

我认为您误解了一个基本概念。向类发送alloc将导致创建该类的新对象,该对象尚未初始化,您拥有的retain count将为1

根据您的问题,您需要在什么时候对新创建的对象调用alloc 如果对象是新创建的,则表示有人已经分配了它

如果您的意思是:什么时候需要对新创建的对象调用retain?答案是,如果你想自己持有它,而不是依赖于谁分配了它,并且可能会在某个时候发布它。。记住alloc/new语法将retain计数提高1,其中[NSArray array]等其他创建方法返回autorelease对象

一般来说,我建议使用ARC,不要被这些问题困扰。

如果没有工厂方法,您只需要自己调用alloc。你可以用任何一种方式来处理保留计数和内容。