Ответ
Безопасность достигается через корректное использование свойств (@property) вместо прямого доступа к переменным экземпляра (ivars).
Рекомендуемый подход:
@interface MyClass : NSObject
// Объявление свойств обеспечивает инкапсуляцию и управление памятью.
@property (nonatomic, strong) NSString *name;
@property (atomic, copy) NSArray *items;
@end
Преимущества использования @property:
- Управление памятью: Автоматические retain/release/сopy (атрибуты
strong,weak,copy). - Потокобезопасность: Свойство
atomic(по умолчанию) обеспечивает атомарность геттера/сеттера. - Кастомизация: Возможность переопределения сеттеров и геттеров.
- KVO/KVC: Поддержка технологий наблюдения и кодирования.
Когда допустим прямой доступ к ivars (_variable):
- В методах
initиdealloc(во избежание побочных эффектов от KVO/кастомных сеттеров). - В критичных по производительности участках кода (после профилирования).
- В реализациях геттеров/сеттеров самого свойства.
Для многопоточности:
- Используйте
atomicсвойства для простых случаев. - Для сложной синхронизации применяйте
dispatch_queue,@synchronizedили другие примитивы, даже сnonatomicсвойствами.