泄漏在哪里?

时间:2011-06-18 21:58:48

标签: objective-c xcode memory-leaks

我不明白泄漏在哪里。

我正在查询数据库中的字段。在此之后,我插入一个NSMutableArray列表。

@property (nonatomic, retain) NSMutableArray *bList;

@property (nonatomic, retain) NSString *icon;//Model

Model *newModel = [[Model alloc] init]; 
newModel.icon = [NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 2)];
[self.bList addObject:newModel];
[newModel release];

最后:

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

3 个答案:

答案 0 :(得分:4)

    [self.bList release];

不要那样做;使用self.bList = nil;[bList release], bList = nil;

该代码似乎没有泄漏,除非我遗漏了一些明显的东西。

请记住,leaks标识泄漏的分配位置,而不是泄漏的位置。泄漏可能是由于其他地方过度保留造成的。

答案 1 :(得分:1)

根据您对@murat的回答的评论,如果您正在做,

self.blist = [[NSMutableArray alloc] init];

然后你正在泄漏记忆,因为你在该行中获得了两次所有权。一个由alloc-init和一个基于属性(假设它是retain ed,大多数应该是)。在这种情况下,在dealloc中释放一次将无法平衡retain-release次来电。你不得不宁可做,

self.blist = [NSMutableArray array]; 

self.blist = [NSMutableArray arrayWithCapacity:100];

答案 2 :(得分:-2)

您创建了一个数组实例,但没有占用内存空间。对于blist数组,请分配一个内存空间。

self.blist= [[NSMutableArray alloc]init]; // or you can create like
self.blist= [[NSMutableArray alloc]initWithCapacity:100];