Почти все (но самые простые) хорошо спроектированные объекты будут иметь частные API. Вот и вся идея инкапсуляции.
Я предполагаю, что когда вы создаете подкласс класса фреймворка, ваш код все еще вызывает только открытый API для этого класса, поэтому вы сами не вызываете какие-либо частные API. Если бы это было не так, то наверняка никто не смог бы выпустить какое-либо программное обеспечение, использующее платформы Cocoa и Cocoa-touch.
Если вы создаете подкласс и намеренно вызываете закрытый метод, тогда, конечно, это будет нарушением
Возьмите этот пример
/*
* This is a framework class that needs to be subclassed
* it has one public method - (void)save;
* and one private method - (void)doSomeWork;
*/
@interface FrameWorkClass : NSObject
- (void)save;
@end
@interface FrameWorkClass ()
//private
- (void)doSomeWork;
@end
@implementation FrameWorkClass
- (void)save
{
[self doSomeWork]; // Call to private method
}
@end
/*
* This is our subclass of FrameWorkClass
*/
@interface MyClass : FrameWorkClass
// more methods
@end
Если я сделаю это
MyClass *myClass = [[MyClass alloc] init];
[myClass save];
метод save приводит к вызову частного метода API - (void)doSomeWork;
. Я не назвал это непосредственно классом структуры. Если бы я сделал это вместо
MyClass *myClass = [[MyClass alloc] init];
[myClass doSomeWork];
Тогда я бы напрямую вызывал закрытый API, который был бы отклонен.