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和autorelease)_Objective C_Memory Management_Autorelease - Fatal编程技术网

Objective-C内存管理(alloc和autorelease)

Objective-C内存管理(alloc和autorelease),objective-c,memory-management,autorelease,Objective C,Memory Management,Autorelease,当您分配和初始化and对象,然后想要返回该对象时,您应该如何返回它 我有以下代码: NSXMLDocument* fmdoc = [[NSXMLDocument alloc] initWithContentsOfURL:trackInfoUrl options:NSXMLDocumentTidyXML error:&err]; return [fmdoc autorelease]; 这是正确的吗?这是正确的。由于您正在初始化对象,因此您有责任释放或自动释放它 由于创建时的保

当您分配和初始化and对象,然后想要返回该对象时,您应该如何返回它

我有以下代码:

NSXMLDocument* fmdoc = [[NSXMLDocument alloc] initWithContentsOfURL:trackInfoUrl
    options:NSXMLDocumentTidyXML error:&err];  
return [fmdoc autorelease];

这是正确的吗?

这是正确的。由于您正在初始化对象,因此您有责任释放或自动释放它

由于创建时的保留计数为1,并且您希望在调用方法有机会使用该对象之前不会将其删除,因此autorelease是要发送的正确消息


如果您将其发送到release,内存将立即被回收。通过发送autorelease,在默认的autorelease池耗尽之前,内存不会被回收,这在调用方法有机会保留对象(如果需要的话)之后才会发生。

正确,但我不鼓励提及具体的保留计数,如在创建时,保留计数可以是任意数字,具体取决于内部实现细节。更具建设性的是,把retain看作是你加上或减去的东西,但永远不要直接质疑它的价值。@bbum,令人惊讶的评论,这改变了我的思维方式。