има ли причина да се използва свойство за ivar, което се използва само вътрешно в клас?

Има ли причина да се използва свойство за ivar, което се използва само вътрешно в клас?

Виждам, че използването на свойства в object-c за клас помага на други класове да имат достъп до променливите на екземпляра, но само за вътрешно използване на променлива на екземпляр има ли полза/нужда от използване на свойство за него? Всъщност за имота трябва да сте "себе си". преди да има достъп до него изглежда, за разлика от само името на променливата на екземпляра.

Може би трябва да разделя този въпрос на:

  • например променливи, които представляват IBOutlet контроли (в случай, че това е специално)
  • всяка друга променлива на екземпляр, от която може да се нуждаете в методите на клас, за да помогнете

person Greg    schedule 04.04.2011    source източник


Отговори (2)


Сигурен. Ако трябва да промените стойността на тази променлива в моменти, различни от -init и -dealloc, използването на @property означава, че можете да оставите компилатора да управлява управлението на паметта вместо вас.

person Dave DeLong    schedule 04.04.2011
comment
Здравей Дейв - не разбрах какво имаш предвид тук - все още трябва да освободиш свойства в метода dealloc, който предполагах? - person Greg; 04.04.2011
comment
Бих предложил да добавите такива @propertys в разширение на клас. - person Richard; 04.04.2011
comment
@Greg да, пак ще трябва да -release в -dealloc (както обикновено). Но вътрешно ще можете да направите [self setFoo:newFoo]; и цялото управление на паметта за освобождаване на старата стойност и запазване на новата стойност ще бъде обработено вместо вас. Това е много много много полезно. Предложението на @Richard за поставяне на декларацията в разширение на клас е страхотно. - person Dave DeLong; 04.04.2011
comment
+1 (+10, ако можех). Капсулирането на управлението на паметта е критично. Алтернативата е да го разпръснете навсякъде, в целия си код, което прави кошмар за отстраняване на грешки, когато (не ако) забравите някъде необходимо запазване или освобождаване. Използването на @property и синтаксис точка е донякъде случайно; тук е критично използването на методи за настройка, а не средствата за създаването им. Методите за ръчно валцувани сетери биха имали същата полза по отношение на капсулирането. - person Sherm Pendley; 05.04.2011
comment
добре, благодаря - жалко е, че трябва да пишете самостоятелно. преди да използвам свойство обаче - или има +ve завъртане на това, което пропускам? - person Greg; 05.04.2011
comment
@Greg, ако оставите self., тогава просто осъществявате директен достъп до ivar, което напълно заобикаля настройката на свойства. Ако предпочитате, можете да направите [self setFoo:newFoo]; вместо self.foo = newFoo; - person Dave DeLong; 05.04.2011

Здравей, Ботман, не показва стила на съдържанието, но сега не ми дава никаква грешка при анализ. Все едно нищо не се е променило. добра стъпка напред предполагам. Какво мислите, че го спира да показва id=content? Благодаря..
person Erik B    schedule 04.04.2011
comment
... и ето защо аксесоарите са толкова важни. Твърде лесно е да забравим такива неща, когато ги пишем на ръка! :-) - person Sherm Pendley; 05.04.2011
comment
@Sherm Не го осъзнавах, но доказах нещо, нали? :) - person Erik B; 05.04.2011