скалярное предупреждение об иваре и памяти или viewUnLoad - PullRequest
0 голосов
/ 06 марта 2012

У меня есть UIViewController со скалярными иварами.Я хотел бы знать, что произойдет, когда контроллер получит предупреждение памяти.

testBool будет сохранен без изменений или будет сброшен?

class.h

@interface myView : UIViewController
{
BOOL testBool;
}

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Когда вы получаете предупреждение памяти, вы должны реагировать на него.Система попытается помочь вам (освобождая представления VC и снова вызывая loadView / viewDidLoad при необходимости), но вам нужно позаботиться обо всех ваших объектах.

Говоря об объектах ... если вы определите "BOOL *", это будет указатель ... Я не думаю, что вы действительно этого хотите (вам нужно будет выделить немного памяти и назначить этот адрес памяти для testBool, таквы можете получить доступ к действительному скалярному значению с помощью * testBool = YES / NO и освободить эту память в [self dealloc]).

Как правило, управление памятью какао применимо только к ОБЪЕКТАМ.Если вы возитесь с указателями на скаляры, вы должны иметь дело с распределением памяти.Вы должны использовать скалярные ивары или Foundation-Types, такие как NSNumber.Если вы используете ARC, вам даже не нужно сильно заботиться об управлении памятью (сохранение / освобождение).Только когда вы получаете предупреждения памяти, вы должны назначить nil переменным (ARC будет обрабатывать управление памятью).

0 голосов
/ 06 марта 2012

Нет, оно не будет выпущено, когда вы получили предупреждение, просто

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

Его вызвали.Это говорит о том, что ваш класс занимает много памяти, поэтому вы должны освободить некоторые вещи, которые вы не используете.

Но если вы получите несколько предупреждений о памяти, будет вызван Deloc, и вы навернякавар собирается исчезнуть.

...