Добавить ivars в @implementation

Для хорошего инкапсуляции приличные программисты 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.

Однако я не уверен в его синтаксической корректности. Может ли кто-нибудь подтвердить или аннулировать его каноническими ссылками?

Ответ 2

Мне также было любопытно. Вот обновленная ссылка от Apple:

Вы можете определить переменные экземпляра без свойств

Лучше всего использовать свойство на объекте в любое время, когда вам нужно отслеживать значение или другой объект.

Если вам нужно определить свои собственные переменные экземпляра без объявления свойства, вы можете добавить их внутри фигурных скобок в верхней части интерфейса или реализации класса, например:

@interface SomeClass : NSObject {
    NSString *_myNonPropertyInstanceVariable;
}
...
@end

@implementation SomeClass {
    NSString *_anotherCustomInstanceVariable;
}
...
@end