Это на самом деле не выполняет то, что вы пытаетесь сделать.Кажется, это работает только потому, что Objective C позволяет отправлять сообщения на нулевые указатели объектов.Вы правы в своем примере, что вы теряете указатель на выделенную память и, следовательно, оставляете его невыпущенным.
Правильный способ сделать это - просто вызвать release для строки, а затем установить для него значениеnil (второй сценарий в вашем примере).
Обратите внимание: если бы string1 было свойством класса с ключевым словом retain, вы могли бы сделать что-то вроде этого:
self.string1 = nil;
И это фактически освободит переменную.Это зависит от деталей реализации, связанных с синтезом, так что вам не нужно беспокоиться об этом: ваш первоначальный вопрос.Просто интересная заметка.