【问题标题】:Memory management issue with retain保留的内存管理问题
【发布时间】:2010-11-22 12:23:07
【问题描述】:

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

从界面:

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

从实现:

@synthesize xmlData;

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

xmlData = [[NSMutableData alloc] init]; 

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    你需要在dealloc中release它。

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

    如果直接做,需要保留:

    xmlData = [[NSMutableData alloc] init];
    

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

        我发现它让一切都井井有条并保持平衡

        我也看过

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

        (但我不是粉丝)

        我的方法……

        • 只能通过 Accessors/Mutators 访问 ivars
        • 分配/初始化本地变量
        • 将本地变量分配给 ivar(类 变量)
        • 释放本地变量

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多