有人可以帮助我,请了解如何在以下方案中完成和处理分配和内存管理。我正在给出一个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;
}
答案 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/有一篇很好的博客文章我建议阅读,因为它提供了很好的例子(包括一些边缘案例)并且易于理解。