Добавьте ivars в @implementation - PullRequest
       2

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

11 голосов
/ 13 января 2012

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

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

Ответы [ 2 ]

11 голосов
/ 13 января 2012

Это совершенно правильно, и вот документ Apple об этом говорит:

Лично я не использую его, так как предпочитаю синтаксис категории продолжения класса.

3 голосов
/ 06 июня 2013

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

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

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

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

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

@implementation SomeClass {
    NSString *_anotherCustomInstanceVariable;
}
...
@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...