目标C:关于释放实例属性的查询

时间:2011-07-02 16:27:01

标签: objective-c ios memory-management

我对内存管理有一般性疑问

//In .h file I defined a property
@interface AClass
{
    someClass *aProperty;
}

@property (nonatomic, retain) someClass *aProperty;

end



//In .m file I synthesized the property and also initialized the property
@implementation AClass

-(void)aMethod
{
    self.aProperty = [[someClass alloc]init];
}

我的问题是

对于'aProperty',我在哪里做'释放'以防止内存泄漏?我通常理解例如属性(使用点符号),我们在'dealloc'和'viewdidunload'方法中进行发布。但是对于这个例子,我是否需要在'aMethod'方法中再次发布aProperty?

2 个答案:

答案 0 :(得分:4)

  1. 您必须在 dealloc
  2. 中发布该实例
  3. 您的属性初始化会泄漏内存。你做alloc + init,保留在属性中,但不释放。通常使用self.property = [[[someClass alloc] init] autorelease]之类的东西。

答案 1 :(得分:2)

由于您在

中有retain
@property (nonatomic, retain) someClass *aProperty;

AClass的任何实例都会自动retain其属性aProperty。因此,您需要使用[aProperty release]的{​​{1}}方法拨打dealloc

每次调用AClass时,您都在创建aMethod的新实例而不释放上一个实例。这将导致巨大的泄漏。您可以通过以下两种方式之一解决此问题。要么释放之前的someClass值,要么添加对aProperty的调用。