Является ли хорошей практикой помещать закрытый API в файлы .m и публичный API в файлы .h в Какао? - PullRequest
2 голосов
/ 29 марта 2010

Многие из моих классов в моем текущем проекте имеют несколько свойств и методов, которые вызываются только из самого класса. Кроме того, они могут связываться с работой класса в зависимости от текущего состояния класса.
В настоящее время все эти интерфейсы определены в объявлении основного интерфейса в файлах .h. Считается ли хорошей практикой помещать «частные» методы и свойства в начало файлов .m?

Это ни на что не повлияет, так как я, вероятно, единственный человек, который когда-либо смотрел этот исходный код, но, конечно, было бы интересно узнать о будущих проектах.

Ответы [ 2 ]

6 голосов
/ 29 марта 2010

Начиная с Objective-C 2.0, лучшая практика - помещать закрытые методы в «расширение класса». Это позволяет компилятору предупреждать вас, если вы не реализовали ни один из методов. Расширения класса также позволяют изменять семантику чтения / записи @properties, чтобы общедоступный API мог, например, указать readonly для свойства, а внутренне свойство можно использовать как readwrite.

В .ч: ​​

@interface MyClass : NSObject
{}

@property (readonly) id myProp;

- (void)aPublicMethod;
@end

В .м:

@interface MyClass ()
@property (readwrite) id myProp; //upgrade myProp to readwrite within the class.

- (id)aPrivateMethod;
@end

@implementation MyClass
@synthesize myProp;

- (void)aPublicMethod { ... }

- (id)aPrivateMethod;

@end

Если вы забудете реализовать -aPrivateMethod в основном блоке @implementation, компилятор выдаст предупреждение. Это лучше, чем старый способ использования категории, такой как @interface MyClass (PrivateMethods), в этом случае компилятор не может предупредить вас, что метод не был реализован.

5 голосов
/ 29 марта 2010

Да, поместите их в категорию в верхней части ваших файлов .m.

...