Если вы работаете в Objective-C 2.0, лучший способ создания «трудных» для других методов - это поместить их в расширение класса . Предполагая, что у вас есть
@interface MyClass : NSObject {
}
- (id)aPublicMethod;
@end
в MyClass.h
файле, вы можете добавить к MyClass.m
следующее:
@interface MyClass () //note the empty category name
- (id)aPrivateMethod;
@end
@implementation MyClass
- (id)aPublicMethod {...}
- (id)aPrivateMethod {...} //extension method implemented in class implementation block
@end
Преимущество расширения класса заключается в том, что методы «расширения» реализованы в исходном теле класса. Таким образом, вам не нужно беспокоиться о том, в каком @implementation
блоке находится реализация метода, и компилятор выдаст предупреждение, если метод расширения не реализован в классе '@implementation
.
Как уже отмечали другие, среда выполнения Objective C не обеспечит конфиденциальность ваших методов (и не так уж сложно определить, какие методы используют дамп класса, даже без исходного кода), но компилятор генерировать предупреждение, если кто-то пытается позвонить им. В общем, сообщество ObjC принимает «Я сказал вам не вызывать этот метод [помещая его в расширение или категорию частного класса или , просто документально подтверждая, что метод является закрытым ], и вы все равно вызвали его. Что бы ни случилось, это твоя вина. Не будь глупым. " отношение к этому вопросу.