существует еще одно различие, но только в Internet Explorer. Происходит при смешивании HTML и SVG., если родитель является 'другими' из тех двух, то .parentNode дает родителя, в то время как .parentElement дает неопределенный.
Правила просты. Освободить объект следует только в том случае, если он принадлежит вам. то есть объект был получен с помощью метода, запускающего "new" или "alloc", или метода, содержащего копию.
Правила управления памятью какао
Следовательно, объект не должен выполнять [самовосвобождение] или [самовосвобождение], если он не имеет сделано ранее [самообслуживание].
Если вы видите это в коде, вероятно, это неправильно. Однако при определенных обстоятельствах, которые, возможно, можно оправдать, есть законный ответ. (Поэтому убедитесь, что вы делаете это по правильным причинам.)
Хороший пример того, когда это имеет смысл, - это когда вы создаете объект, который отправляется для загрузки URL. Объект находится в памяти при загрузке URL-адреса, а затем отправляет своему делегату сообщение о том, что данные готовы (или URL-адрес не может быть загружен). Как только его сообщение было отправлено, оно уничтожает себя, поскольку оно больше не нужно. В этой ситуации код / функция, создавшая «загрузчик URL», может больше не находиться в памяти, т.е. если он был вызван в ответ на выбор пользователем пункта меню или действия в контроллере представления, которого больше нет на экране. .
Это полезно, когда код, создающий объект «загрузка», не заботится о том, завершится загрузка или нет.
По словам великого философа Алисии Сильверстоун: « У меня было непреодолимое чувство мерзости », когда я это читал. Но я не могу сказать вам, почему.
Думаю, я бы использовал автозапуск
, а не простой выпуск
, поскольку вы все еще выполняете код в self
], когда вы его называете, но кроме этого, я не могу придумать никаких технических причин, по которым это не сработает.
Это законно, но будьте осторожны. Вы хотите быть уверенным, что ничто другое не отправит вам сообщение после того, как вы освободитесь.
Я проделывал подобные вещи для схемы сбоя еще до того, как у нас появился CoreData.
Ну, частью протокола является то, что если вы отправите релиз самому себе , то вам также следовало один раз послать аванс, что, я полагаю, вы делаете. Тогда нет ничего подозрительного. Я имею в виду, что код выделения должен управлять временем жизни вашего экземпляра; сам по себе он может только продлить свою жизнь, но никогда не сделать ее короче (поскольку, сделав ее короче, вы внезапно оставите разрешающего владельца экземпляра с недопустимым указателем).
И я буду использовать [самовыпуск] вместо [самовыпуск]. Потому что обычно он вызывается в
- (void)aMethod
{
[self.delegate aDelegateMethod:self];
[self release];
//If you add code related to self here, after [self release], you are making a huge mistake.
}
. Если я использую [self autorelease], я все равно могу что-то делать после autorelease.