Всегда ли мы должны выделять @property с атрибутом retain ?

#objective-c #retain

#objective-c #сохранить

Вопрос:

Я узнал, что если a @property имеет атрибут retain , он всегда должен быть освобожден в dealloc методе. Но если программа никогда не выделяет память для свойства, это означает, что мы освобождаем нераспределенный объект, верно? Означает ли это, что свойство должно быть выделено в init методе?

Комментарии:

1. В настоящее время я использую его без ARC для учебных целей

Ответ №1:

Но если программа никогда не выделяет память для свойства, это означает, что мы освобождаем нераспределенный объект, верно?

Неправильно. Если вы говорите [self->myVar release] in dealloc , то либо myVar было присвоено значение, либо нет:

  • Если он есть, он теперь освобожден, чего вы и хотите.

  • Если этого не произошло, это так nil , и ничего не происходит, и никакого вреда не причинено, потому что сообщение to nil ничего не делает.