Авто-релиз вызывает сбой приложения - PullRequest
1 голос
/ 18 ноября 2011

Я крутился на этом уже 2 часа, поэтому подумал, что отправлю сюда за советом.

В моем методе viewDidLoad я делаю:

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 600)];
...
UIView *contactsRow = [self generateContactsRow];
contactsRow.frame = CGRectMake(10, tableMaxY, 300, 56);
...
[scrollView addSubview:contactsRow];
[self.view addSubview:scrollView];
[scrollView release]; 

В [self generateContactsRow] я в основном создаю представление контейнера, загружаю в него кучу других представлений (кнопки, метки и т. Д.) И возвращаю его.

UIView *containerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 0)] autorelease];
... (define stuff)
// set it
[containerView addSubview:imageView];
[containerView addSubview:textLabel];
[containerView addSubview:detailTextLabel];
[containerView addSubview:addButton];
[containerView addSubview:hr];

// and forget it
[imageView release];
[textLabel release];
[detailTextLabel release];
[addButton release];
[hr release];

return containerView;

Тот факт, что я автоматически выпускаю containerView, вызывает сбой моего приложения. Я возвращаю объект alloc'd, поэтому я подумал, что должен каким-то образом освободить его, и авто-релиз казался лучшим способом. Если я его уберу, все будет работать нормально, но у меня не будет утечки памяти?

Спасибо

Ответы [ 2 ]

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

Сделайте сегмент как следующий

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 600)];
...
UIView *contactsRow = [[self generateContactsRow] retain];
contactsRow.frame = CGRectMake(10, tableMaxY, 300, 56);
...
[scrollView addSubview:contactsRow];
[self.view addSubview:scrollView];
[contactsRow release]; 
[scrollView release]; 

Я сохраняю contactsRow здесь и освобождаю его после того, как у меня есть подпредставление для scrollView. Так что утечки памяти не будет.

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

Вы можете освободить его в методах viewdidunload или viewwillDisapper ...

...