Ответ 1
Это совершенно верно и вот документ Apple говорит об этом:
Я лично его не использую, поскольку я предпочитаю синтаксис категории продолжения класса.
Для хорошего инкапсуляции приличные программисты Objective-C
помещают свои private
ivars в закрытый extension
, объявленный в основном файле реализации, например:
// MyClass.m
@interface MyClass () {
float value;
}
@end
@implementation MyClass
@end
Но в последнее время я нашел более простой способ скрыть private
ivars: ivars можно объявить в блоке {}
после @implementation
, например:
// MyClass.m
@implementation MyClass {
float value;
}
@end
Это действительно удобно, если не нужно скрывать частные методы, но только private
ivars.
Однако я не уверен в его синтаксической корректности. Может ли кто-нибудь подтвердить или аннулировать его каноническими ссылками?
Это совершенно верно и вот документ Apple говорит об этом:
Я лично его не использую, поскольку я предпочитаю синтаксис категории продолжения класса.
Мне также было любопытно. Вот обновленная ссылка от Apple:
Вы можете определить переменные экземпляра без свойств
Лучше всего использовать свойство на объекте в любое время, когда вам нужно отслеживать значение или другой объект.
Если вам нужно определить свои собственные переменные экземпляра без объявления свойства, вы можете добавить их внутри фигурных скобок в верхней части интерфейса или реализации класса, например:
@interface SomeClass : NSObject { NSString *_myNonPropertyInstanceVariable; } ... @end @implementation SomeClass { NSString *_anotherCustomInstanceVariable; } ... @end