内存管理问题与保留

时间:2010-11-22 12:23:08

标签: iphone objective-c

当你有一个你在接口中保留的属性并且你在代码中的某处分配时,你是否需要在代码中释放它并在dealloc方法中释放它,即保留计数是2?

来自界面:

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

来自实施:

@synthesize xmlData;

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

xmlData = [[NSMutableData alloc] init]; 

3 个答案:

答案 0 :(得分:3)

你需要在{dealloc中release

如果您需要设置retain,则设置与您的操作方式有关。

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

xmlData = [[NSMutableData alloc] init];

如果你使用setter,它会自动完成,所以你需要释放它(如果它没有自动释放):

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

答案 1 :(得分:0)

不知道但我知道怎么找出来,如果你通过XCode Profiler运行并选择Allocations,它将列出每个对象的数量。

答案 2 :(得分:0)

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

我的做法是只通过Accessor / Mutator(getter / setter)访问ivars,所以当我分配和初始化ivar时,我会做以下几点。

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

我发现它保持一切井井有条和平衡

我也见过

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

(但我不是粉丝)

我的方法......

  • 仅通过Accessors / Mutators访问ivars
  • Alloc / Init a local var
  • 将本地var分配给ivar(类 变量)
  • 发布本地var