Вызов "[self.view release];" останавливает утечку памяти? - PullRequest
1 голос
/ 09 ноября 2011

Я довольно новичок в Objective-C, и хотя я думаю, что понимаю основы подсчета ссылок, я не понимаю некоторые из поведения, которое я вижу.

В Инструментах я заметил, что у меня очень сильно теряется память при перемещении между двумя ViewControllers. Насколько я могу судить, я звоню в релиз каждый раз, когда я вызываю alloc, но я уверен, что делаю некоторые ошибки новичка.

Однако ранее я обнаружил, что звоню:

 [self.view release];

Останавливает утечку. Тем не менее, добавляется сообщение об ошибке, что «выходной указатель не был выделен». Очевидно, это исправляет что-то, что я сделал неправильно, но я не уверен, почему вызов этого там делает работу, которая

[super dealloc];

Должен (?) Делать.

Я уверен, что там полно проблем, но если кто-нибудь сможет мне помочь, я буду очень благодарен - несколько дней рвал на себе волосы: /

Вот код для WatchViewController:

#import "WatchViewController.h"

@implementation WatchViewController

@synthesize backButton = _backButton, scrollView = _scrollView, image;

...

-(void) backButtonPressed
{
    [self.navigationController popViewControllerAnimated:YES];
}

...

- (void)loadView
{
UIView *locView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view = locView;

[locView release];
}

-(void) dealloc
{
self.image = nil;
self.backButton = nil;
self.scrollView = nil;

[super dealloc];
}

- (void)viewDidLoad
{
[super viewDidLoad];

NSString *str = [[NSBundle mainBundle] pathForResource:@"back_button" ofType:@"png"];
UIButton *locButton = [[UIButton alloc] init];
UIImage *locImage = [[UIImage alloc] initWithContentsOfFile:str];
[locButton setImage:locImage forState:UIControlStateNormal];
[locButton setFrame:CGRectMake(0, 0, locImage.size.width, locImage.size.height)];
[locButton addTarget:self action:@selector(backButtonPressed) forControlEvents:UIControlEventTouchUpInside];

self.backButton = locButton;
[self.view addSubview:_backButton];

[locImage release];
[locButton release];

[self.view release];
}
...