同じ名前のメソッドで2つのクラスを作成しました。それらの1つではプライベート、もう1つではパブリックです。次に、コードのどこかにこれを書きます:
-(void) doMagic:(id) object {
[(ClassA*)object doSmth];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
ClassB * objB = [[ClassB alloc] init];
[self doMagic:objB];
}
コンソールで私はこれを見る:2012-04-25 23:41:28.183 testmagic [558:403] classB --doSmth
クラスのソースは次のとおりです。
//.h
@interface ClassA : NSObject
-(void) doSmth;
@end
//.m
@implementation ClassA
-(void)doSmth {
NSLog(@"classA - doSmth");
}
@end
//.h
@interface ClassB : NSObject
@end
//.m
@interface ClassB ()
-(void) doSmth;
@end;
@implementation ClassB
- (void)doSmth {
NSLog(@"classB - doSmth");
}
@end
私は知っています、それはObj-Cのメソッドの「メッセージ」の性質によるものであり、実行時にクラスはおそらくどのメソッドがプライベートかパブリックかを知らないでしょうが、ここに質問があります:
どうすれば本当にプライベートなメソッドを作成できますか?逆コンパイルするとメソッド名が表示されるので、誰かが私のプライベートAPIを使用できると聞きました。どうすればそれを防ぐことができますか?