我对内存管理有一般性疑问
//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?
答案 0 :(得分:4)
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
的调用。