Най-добрата практика е първо да освободите променливите на екземпляра си и след това да ги зададете на nil
във вашия -dealloc
метод. Аз лично обичам да го правя така:
[myVar release], myVar = nil;
Ако зададете вашите променливи на екземпляр на nil
, вие не ги освобождавате и причинявате изтичане на памет. Задаването им на nil
след освобождаването обаче ще гарантира, че не причинявате течове и ако по някаква причина се опитате да получите достъп до тези променливи на екземпляр по-късно, няма да получите боклук памет.
Ако имате променлива на екземпляр, настроена като такава,
@property (retain) NSObject *myVar;
тогава не е добра идея да се извиква self.myVar = nil;
по време на освобождаване. Ако имате обекти, които са се регистрирали за KVO известия във вашата променлива на потребителския модел, извикването на self.myVar = nil
ще изпрати тези известия и други обекти ще бъдат уведомени, което е лошо, защото те ще очакват да сте все още във валидно състояние - вие не сте ако сте в процес на освобождаване.
Дори и да не са регистрирани за KVO известия, пак не е добра идея да го правите, защото никога не трябва да извиквате методи, които могат да разчитат на състоянието на вашия обект, когато състоянието му е несъвместимо (някои променливи може/ще да не съществуват) и вие трябва просто да се справите сами с процеса. [myVar release], myVar = nil;
ще е достатъчно.
Ако искате повече информация, прочетете отговора на Дейв Делонг на това въпрос.
За инициализиране също не е добре да се извикват настройки на свойства и получаване (по почти същата причина като по-горе). При повикване -init
бихте настроили гореспоменатата променлива като такава:
myVar = nil; // If you want to set it up as nil.
OR
myVar = [[NSObject alloc] init]; // Or set it up as an actual object.
Избягвайте self.myVar = nil
и self.myVar = [[NSObject alloc] init
в случаите, когато вашият клас е в неопределено състояние (тези извиквания обаче са добре в -viewDidLoad
и -awakeFromNib
, тъй като до този момент класът ви е напълно инициализиран и можете да разчитате на променливите на екземпляра да бъдат в пълно състояние).
person
Itai Ferber
schedule
18.03.2011