У своєму інтерфейсі ви можете офіційно оголосити змінну екземпляра між дужками, або за @property
межами дужок, або обох. Так чи інакше, вони стають атрибутами класу. Різниця полягає в тому, що якщо ви заявляєте @property
, ви можете реалізувати за допомогою @synthesize
, який автоматично кодує ваш геттер / сетер для вас. Автоматичний кодер встановить ініціалізацію цілих чисел і плаває, наприклад, до нуля. ЯКЩО ви оголосите змінну екземпляра, і НЕ вказуєте відповідну @property
, тоді ви не можете використовувати @synthesize
і потрібно написати власний геттер / сеттер.
Ви завжди можете перекрити автоматично кодований геттер / сетер, вказавши свій власний. Це зазвичай робиться з managedObjectContext
властивістю, яка ліниво завантажена. Таким чином, ви декларуєте свою managedObjectContext
власність, але потім також пишете -(NSManagedObjectContext *)managedObjectContext
метод. Нагадаємо, що метод "getter" - метод, який має те саме ім'я, що і змінна / властивість екземпляра.
Метод @property
декларування також дозволяє вам отримати інші параметри, наприклад, retain
та readonly
, яких метод декларування змінної інстанції не має. В основному, ivar
це старий спосіб, і @property
розширює його, і робить його більш вигадливим / легшим. Ви можете посилатися на будь-яке використання self. префікса чи ні, це не має значення, поки ім'я є унікальним для цього класу. В іншому випадку, якщо ваш суперклас має те саме ім’я властивості, що і ви, тоді вам слід сказати або як self.name або super.name, щоб вказати, про яке ім’я ви говорите.
Таким чином, ви побачите все менше і менше людей, які оголошують ivar
s між дужками, і замість цього переходите до того, щоб просто вказати @property
, а потім зробити @synthesize
. Ви не можете зробити @synthesize
у своїй реалізації без відповідного @property
. Synthesizer знає , який тип атрибута це з @property
специфікації. Оператор синтезу також дозволяє перейменовувати властивості, так що ви можете посилатися на властивість одним ім'ям (скороченням) всередині вашого коду, але зовні у файлі .h використовувати повне ім’я. Однак із справді класним автозаповненням, яке зараз має XCode, це є меншою перевагою, але все-таки є.
Сподіваюсь, це допоможе усунути всю плутанину та дезінформацію, яка пливе там.