2010-11-22 184 views
1

当你有一个属性,你保留在接口中,你在代码中的某处分配,你需要在代码中释放它,以及释放它在dealloc方法,即保留计数是2?内存管理问题与保留

从接口:

NSMutableData *xmlData; 
@property (nonatomic, retain) NSMutableData *xmlData; 

从实现:

@synthesize xmlData; 

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

xmlData = [[NSMutableData alloc] init]; 

回答

3

你需要release它的dealloc。

如果你需要retain它设置时是一个你如何做的问题。

如果直接这样做,你需要保留它:

xmlData = [[NSMutableData alloc] init]; 

如果您使用的setter,它是自动完成的,所以你需要释放它(如果它不自动释放):

NSMutableData *data = [[NSMutableData alloc] init]; 
self.xmlData = data; 
[data release]; 
0

不知道,但我知道如何找出,如果您通过XCode Profiler运行并选择Allocations,它会列出每个对象的计数。

0

在你的例子中......你只需要在 - (void)dealloc中释放伊娃;

我的做法是只通过Accessor/Mutator(getters/setters)访问ivars,因此当我分配并初始化一个ivar时,我执行以下操作。

NSMutableData *lXMLData = [[NSMutableData alloc] init]; 
self.xmlData = lXMLData; 
[lXMLData release]; 

我觉得它让一切都很好地组织和平衡

我也看到

self.xmlData = [[[NSMutableData alloc] init] autorelease];

(但我不是一个风扇)

我的做法......

  • 高德的访问只能通过访问器/增变
  • 分配/初始化一个局部变量
  • 分配局部变量到伊娃(类 变量)
  • 发布当地变种