与Iphone autorelease用法相关的问题

时间:2011-01-05 21:32:04

标签: iphone memory-management autorelease

有人可以帮助我,请了解如何在以下方案中完成和处理分配和内存管理。我正在给出一个Psuedo代码示例和令我不安的问题如下:

interface first  
{ NSDecimalNumber *number1;  
}

implementation  
.....

-(void) dealloc {  
 [number1 release];  
 [super dealloc];  
}


=================================  
interface second  
{ NSDecimalNumber *number2;  
}  

implementation second  
.....  
- (First*) check  
{  
    First *firstObject = [[[First alloc] init] autorelease];  
    firstObject.number1 = [[NSDecimalNumber alloc] initWithInteger:0];   
                    **// do i need to autorelease number1 as well?**  
    return firstObject;  
}  

2 个答案:

答案 0 :(得分:1)

您的代码是正确的。如果您自动释放该对象,其引用计数将达到零并且将被取消分配,然后如果您稍后尝试使用存储在number1中的值,您的应用程序将崩溃。

我添加的唯一增强功能是释放任何现有值。即。

[number1 release];
number1 = [[NSDecimalNumber alloc] initWithInteger:0];   

如果不这样做,每次调用number1时,分配给check的上一个对象都会泄漏。

答案 1 :(得分:-1)

在分配NSDecimalNumber时,需要释放它。 (正如你在dealloc中所做的那样。)

虽然很难根据您的示例代码提供有意义的示例(实际上并未使用“number1”),但一般规则是您对alloc,{{1}的任何对象负责}或copy。如果只在函数范围内需要该对象,您当然可以自动释放它。

http://interfacelab.com/objective-c-memory-management-for-lazy-people/有一篇很好的博客文章我建议阅读,因为它提供了很好的例子(包括一些边缘案例)并且易于理解。