繁体   English   中英

保留的内存管理问题

[英]Memory management issue with retain

当您拥有保留在接口中的属性并在代码中的某个位置分配时,是否需要在代码中释放它以及在dealloc方法中释放它,即保留计数为2?

从界面:

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

从实现:

@synthesize xmlData;

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

xmlData = [[NSMutableData alloc] init]; 

您需要在dealloc中release它。

如果在设置时需要retain它,则取决于您如何做。

如果直接执行此操作,则需要保留它:

xmlData = [[NSMutableData alloc] init];

如果使用setter,它将自动完成,因此需要释放它(如果未自动释放):

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

不知道,但我知道如何找出答案,如果您通过XCode Profiler运行并选择“分配”,它将列出每个对象的计数。

在您的示例中,您只需要在-(void)dealloc;中释放ivar;

我的做法是仅通过Accessor / Mutator(获取器/设置器)访问ivars,因此,当我分配和初始化ivar时,请执行以下操作。

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

我发现它可以使一切井井有条,平衡

我也看过

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

(但我不是粉丝)

我的方法...

  • 仅通过访问器/诱变器访问ivars
  • 分配/初始化本地变量
  • 将本地var分配给ivar(类变量)
  • 发布本地变量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM