Совсем нет. Переменные экземпляра работают нормально и подчиняются тем же правилам управления памятью, что и остальные: сохраните их перед сохранением в экземпляре var и убедитесь, что вы освобождаете их, когда они вам больше не нужны (обычно в dealloc
) .
Некоторая история здесь может быть полезна:
В начале были только переменные экземпляра. «Свойства» существовали только неофициальным способом, по соглашению, для объектов вне вашего класса для доступа к «общедоступным» данным, предоставляемым классом. Вы бы написали свои собственные -(Foo *)foo
и -(void)setFoo:(Foo *)f
методы для каждого из них. Они часто походили на стандартный код, тривиально возвращая ивару в первом случае, и правильно сохраняя / освобождая / ставя танец в последнем.
Итак, появился Objective-C 2.0, который дал нам возможность объявлять свойства с помощью синтаксиса языка и даже генерировать для нас методы доступа - много времени и стандартного кода было сохранено.
Со временем некоторые люди начали думать о всех иварах как о «свойствах», публичных или частных. Общедоступные из них отображаются в файле .h как @properties
, но вы также можете создать частный интерфейс для вашего объекта в файле .m, который объявляет ваш «приватный» @properties
, так что вы можете использовать средства доступа внутри вашего класса. Это может быть или не быть излишним, в зависимости от вашей философии, но это, я думаю, имеет отношение к ситуации, которую вы видите сейчас, когда голые ивы выглядят подозрительно.
Они не должны. Переменные экземпляра счастливо существуют без какого-либо другого механизма. Просто получите право на сохранение / освобождение (в среде без GC).
Когда вы станете более продвинутым, см. Ответ @ bbum на этот вопрос:
Должен ли каждый ивар быть собственностью?
для некоторых университетских вещей, чтобы думать о преимуществах свойств вокруг KVO и подклассов.