当你有一个你在接口中保留的属性并且你在代码中的某处分配时,你是否需要在代码中释放它并在dealloc方法中释放它,即保留计数是2?
来自界面:
NSMutableData *xmlData;
@property (nonatomic, retain) NSMutableData *xmlData;
来自实施:
@synthesize xmlData;
- (void)dealloc
{
[xmlData release];
[super dealloc];
}
xmlData = [[NSMutableData alloc] init];
答案 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]
;
(但我不是粉丝)
我的方法......