Где здесь утечка? - PullRequest
       2

Где здесь утечка?

0 голосов
/ 19 июня 2011

Я не понимаю, где здесь утечка.

Я запрашиваю поле в базе данных. После этого я вставляю в список 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 ]

4 голосов
/ 19 июня 2011
    [self.bList release];

Не делай этого; либо используйте self.bList = nil; или [bList release], bList = nil;

Кажется, в этом коде нет утечки, если только я не пропустил что-то очевидное.

Помните, что leaks определяет, где была обнаружена утечка, а не где была утечка. Утечка, вероятно, вызвана чрезмерным удержанием в другом месте.

1 голос
/ 19 июня 2011

На основании вашего комментария к ответу @murat, если вы делаете,

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

тогда вы теряете память, поскольку вы дважды становитесь владельцем этой строки. Один на alloc-init и один на основе свойства (при условии, что оно retain ed, в основном должно быть). В таком случае, если вы отпустите его один раз в dealloc, это не уравновесит вызовы retain-release. Тебе придется скорее сделать,

self.blist = [NSMutableArray array]; 

или

self.blist = [NSMutableArray arrayWithCapacity:100];
0 голосов
/ 19 июня 2011

Вы создали экземпляр массива, но не заняли для него место в памяти.Для вашего массива блиста выделите пространство памяти.

self.blist= [[NSMutableArray alloc]init]; // or you can create like
self.blist= [[NSMutableArray alloc]initWithCapacity:100];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...