Вопросы о методе iPhone (освободите viewDidUnload) - PullRequest
1 голос
/ 09 февраля 2011

Я работал над приложением, и в книге, которую я прочитал, сказано, чтобы поместить эти операторы в методы viewDidUnload и dealloc. Какая другая информация должна идти сюда? У меня есть кнопки и метки в моей программе. Нужно ли что-нибудь для них делать?

Я хочу эффективно работающее приложение.

Вот мой код:

- (void)viewDidUnload {
        // Release any retained subviews of the main view.
        // e.g. self.myOutlet = nil;
        self.doublePicker = nil;
        self.color = nil;
        self.choice = nil;
        [super viewDidUnload];
    }

    - (void)dealloc {
        [doublePicker release];
        [color release];
        [choice release];
        [super dealloc];
    }

Ответы [ 3 ]

2 голосов
/ 10 февраля 2011

Вы должны выпускать только свои IBOutlets и другие элементы пользовательского интерфейса в viewDidUnload.Все остальные данные, которые вы разместили в вашем контроллере представления (а также IBOutlets), должны быть освобождены в методе dealloc.Это связано с тем, что представление может загружаться и выгружаться несколько раз за время существования контроллера представления.Например, представление может быть выгружено, если оно не видно, но данные за ним (в контроллере представления) все еще должны храниться в памяти.Когда и представление, и его контроллер больше не нужны, вызывается метод dealloc.

1 голос
/ 10 февраля 2011

Код, который вы опубликовали, верен, но вы также должны создать свойства для ваших торговых точек, например:

в вашем файле .h:

@property (nonatomic, retain) UIPickerView *doublePicker;
@property (nonatomic, retain) UIPickerView *color;
// ...etc

в вашем файле .m

@synthesize doublePicker;
@synthesize color;
// ...etc

Есть некоторые споры об этой технике (явное сохранение ваших торговых точек и выпуск их таким образом), но Apple рекомендует эту технику:

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmNibObjects.html#//apple_ref/doc/uid/TP40004998-SW2

0 голосов
/ 09 февраля 2011

Общее правило заключается в том, что вы хотите позвонить release на все, что вы alloc или init.Компоненты, которые вы создаете в xib, выпускать не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...