Называет [сам выпуск] позволенным времени жизни объекта управления?

существует еще одно различие, но только в Internet Explorer. Происходит при смешивании HTML и SVG., если родитель является 'другими' из тех двух, то .parentNode дает родителя, в то время как .parentElement дает неопределенный.

19
задан Philippe Leybaert 6 September 2009 в 11:23
поделиться

6 ответов

Правила просты. Освободить объект следует только в том случае, если он принадлежит вам. то есть объект был получен с помощью метода, запускающего "new" или "alloc", или метода, содержащего копию.

Правила управления памятью какао

Следовательно, объект не должен выполнять [самовосвобождение] или [самовосвобождение], если он не имеет сделано ранее [самообслуживание].

9
ответ дан 30 November 2019 в 03:25
поделиться

Если вы видите это в коде, вероятно, это неправильно. Однако при определенных обстоятельствах, которые, возможно, можно оправдать, есть законный ответ. (Поэтому убедитесь, что вы делаете это по правильным причинам.)

Хороший пример того, когда это имеет смысл, - это когда вы создаете объект, который отправляется для загрузки URL. Объект находится в памяти при загрузке URL-адреса, а затем отправляет своему делегату сообщение о том, что данные готовы (или URL-адрес не может быть загружен). Как только его сообщение было отправлено, оно уничтожает себя, поскольку оно больше не нужно. В этой ситуации код / ​​функция, создавшая «загрузчик URL», может больше не находиться в памяти, т.е. если он был вызван в ответ на выбор пользователем пункта меню или действия в контроллере представления, которого больше нет на экране. .

Это полезно, когда код, создающий объект «загрузка», не заботится о том, завершится загрузка или нет.

18
ответ дан 30 November 2019 в 03:25
поделиться

По словам великого философа Алисии Сильверстоун: « У меня было непреодолимое чувство мерзости », когда я это читал. Но я не могу сказать вам, почему.

Думаю, я бы использовал автозапуск , а не простой выпуск , поскольку вы все еще выполняете код в self ], когда вы его называете, но кроме этого, я не могу придумать никаких технических причин, по которым это не сработает.

4
ответ дан 30 November 2019 в 03:25
поделиться

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

Я проделывал подобные вещи для схемы сбоя еще до того, как у нас появился CoreData.

3
ответ дан 30 November 2019 в 03:25
поделиться

Ну, частью протокола является то, что если вы отправите релиз самому себе , то вам также следовало один раз послать аванс, что, я полагаю, вы делаете. Тогда нет ничего подозрительного. Я имею в виду, что код выделения должен управлять временем жизни вашего экземпляра; сам по себе он может только продлить свою жизнь, но никогда не сделать ее короче (поскольку, сделав ее короче, вы внезапно оставите разрешающего владельца экземпляра с недопустимым указателем).

3
ответ дан 30 November 2019 в 03:25
поделиться

И я буду использовать [самовыпуск] вместо [самовыпуск]. Потому что обычно он вызывается в

- (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.

2
ответ дан 30 November 2019 в 03:25
поделиться