切换到@property声明后内存泄漏?

时间:2012-03-19 19:47:04

标签: objective-c properties

为什么我这里有内存泄漏:

·H:

@property (nonatomic, retain) NSDictionary *info;

然后在我的.m:

@synthesize info = _info;

我在这里有一个泄漏:

- (id)initWithData:(NSDictionary *)data
{
    self = [super init];
    if (self) {
        self.info = [[NSDictionary alloc] initWithDictionary:data];
    }
    return self;
}

另一个泄漏:

-(void)dealloc {
    [self.info release];
    [super dealloc];
}

2 个答案:

答案 0 :(得分:3)

您的泄漏源于您的财产声明及其分配方式,当您使用setter将属性声明为“retain”时,将为您保留var,这样做

self.info = [[NSDictionary alloc] initWithDictionary:data];

保留var,并且由于alloc还保留了var,你得到+2保留计数,你应该自动释放对象或像

一样分配它。
 _info = [[NSDictionary alloc] initWithDictionary:data];

当您释放属性时也可以将其设置为nil

self.info=nil

答案 1 :(得分:1)

您的构造函数应该使用

self.info = [NSDictionary dictionaryWithDictionary:data];

你的dealloc应简化为

- (void)dealloc {
    self.info = nil;
    [super dealloc];
}