Утечка памяти: self.tableView.backgroundView - PullRequest
0 голосов
/ 14 ноября 2011

Может кто-нибудь дать мне совет, почему у меня есть утечка памяти, связанная с этой строкой:

enter image description here

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

Если вы посмотрите предупреждение из Build and Analyze, вы заметите, что предупреждение действительно относится к строке 38 вашего кода, а не к строке 39, в которой отображается сообщение.

On line38 вы звоните alloc, то есть вы выделяете память для UIImageView.

Каждому alloc, new, copy и retain требуется соответствующий release или autorelease.Итак, компилятор предупреждает вас, что вы вызвали alloc, но нигде не вызвали соответствующий release.

Вы можете добавить autorelease в строку 38 следующим образом:

self.tableView.backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Back_01.jpg"]] autorelease];

Если вы не хотите использовать autorelease, тогда вы можете использовать что-то вроде этого:

UImageView *bgImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Back_01.jpg"]];
self.tableView.backgroundView = bgImage;
[bgImage release];

Единственное реальное отличие состоит в том, что autorelease ожидает до конца цикла выполнения, когдапул авто-релиза сливается, тогда как вызов release потенциально освободит память раньше.

0 голосов
/ 14 ноября 2011

UIImageView в строке 38 подтекает. Вы должны добавить autorelease, вот так:

self.tableView.backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Back_01.jpg"]] autorelease];
...