Показаны сообщения с ярлыком memory leak. Показать все сообщения
Показаны сообщения с ярлыком memory leak. Показать все сообщения

суббота, 31 марта 2012 г.

Еще раз о работе с памятью в Obj-C


Дело обстоит так:

когда создаешь получаешь объект статическим методом вроде stringWithString, то созданный объект попадает в autorelease pool и его счетчик ссылок обнуляется, когда уничтожается этот пул. Однако система может и сама заретайнить некоторые объекты из пула, когда ей не хватает памяти.

Общее правило таково:

Когда ты создаешь получаешь объект методами, в названии которых есть слова alloc, copy, new и retain, то ТЫ СТАНОВИШЬСЯ ВЛАДЕЛЬЦЕМ ОБЪЕКТА И ТЫ ОТВЕЧАЕШЬ ЗА НЕГО И СВОЕВРЕМЕННЫЙ release. Во всех других случаях, ты не являешься владельцем объекта и не вправе контролировать его retainCount - т.е. делать release.

Хочу заметить, что на один alloc, copy, retain должен приходиться один release! То есть не стоит делать несколько раз release, если retain ты сделал всего один раз. ;)

пятница, 16 сентября 2011 г.

NSString stringWithString - пздц!

Даже не знаю, как и сказать! Это пздц! Как так можно?! В очередной раз бьюсь о те же грабли!!!
Вот смотрите:
NSString *name = [NSString stringWithString:nameLabel.text];

из документации:

stringWithString:
Returns a string created by copying the characters from another given string.

+ (id)stringWithString:(NSString *)aString

Parameters
aString
The string from which to copy characters. This value must not be nil.

Либо я чего не понимаю, но я понял так, что создастся НОВАЯ строка по НОВОМУ адресу! Нет? Хуй! адрес новой и старой строки одинаков!!! он типа только счетчик увеличил(и то не понятно как?!) и все. Но после третьего удаления name приложение вылетает с таким свистом что ппц! И как это понимать?! Грустно.