0

有人可以帮助我了解在以下情况下如何完成和处理分配和内存管理。我正在给出一个 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;  
}  
4

2 回答 2

1

您的代码是正确的。如果你自动释放了这个对象,它的引用计数会达到零并且它会被释放,然后如果你稍后尝试使用存储在 number1 中的值,你的应用程序就会崩溃。

我要添加的唯一增强是释放任何现有值。IE

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

如果不这样做,则number1每次check调用之前分配给的对象都会泄漏。

于 2011-01-05T21:40:45.370 回答
-1

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

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

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

于 2011-01-05T21:39:42.513 回答