【发布时间】:2011-07-25 08:09:02
【问题描述】:
Xcode 告诉我,下面的代码在内存泄漏方面存在一些问题。
@property (nonatomic, retain) NSMutableArray *naw_rows;
-(void) loadTableRows:(BOOL)shouldReload
{
[naw_rows removeAllObjects];
[self.naw_rows addObject: [[CellModel alloc] initialize:@"name" title:@"Name" value: self.currentProfile.name]];
[self.naw_rows addObject: [[CellModel alloc] initialize:@"company" title:@"Company name" value: self.currentProfile.company]];
[self.naw_rows addObject: [[CellModel alloc] initialize:@"address" title:@"Address" value: self.currentProfile.address]];
[self.naw_rows addObject: [[CellModel alloc] initialize:@"zipcode" title:@"Zipcode" value: self.currentProfile.zipcode]];
[self.naw_rows addObject: [[CellModel alloc] initialize:@"city" title:@"City" value: self.currentProfile.city]];
}
// here is my cellModel object:
@implementation CellModel
-(id) initialize:(NSString *)newName title:(NSString *)newTitle value:(NSString *)newValue;
{
if (self == [super init])
{
name = newName;
title = newTitle;
value = newValue;
}
return self;
}
- (NSString *) getName
{
return name;
}
- (NSString *) getTitle
{
return title;
}
- (NSString *) getValue
{
return value;
}
-(void)dealloc
{
[super dealloc];
}
@end;
所有 addObject 行都给出以下错误:
在线分配的对象的潜在泄漏 -- 方法返回一个 具有 +1 保留计数的 Objective-C 对象(拥有引用)对象 在线分配 -- 稍后在此执行路径中未引用 并且保留计数为 +1(对象泄露)
在有关内存泄漏的其他主题中,我发现这是正确的方法:
CellModel *model = [[CellModel alloc] initialize:@"name" title:@"Name" value: self.currentProfile.name];
[self.naw_rows addObject: model];
[model release];
但这给了我以下错误:
不正确的对象的引用计数递减不正确 此时由调用者拥有
那么我做错了什么?在我的第一段代码中,保留计数应为 1。由数组拥有。我假设当我使用 [array remodeAllObjects] 时对象被释放
提前致谢,
尼哥
【问题讨论】:
-
这些 ivars 也没有被正确地保留/释放。此外,getter 方法不应该以“get”开头。
标签: ios memory-leaks nsmutablearray retain