我創建了兩個具有相同名稱的方法的類。其中一個是私人的,另一個是公共的。 然後某處的代碼,我寫這篇文章:Objective-C中的私有方法不是私有的
-(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。我如何防止它?
沒有辦法創建_truly_私有方法。如果你的對象響應一條消息,它就會響應。請參閱:http://stackoverflow.com/questions/172598/best-way-to-define-private-methods-for-a-class-in-objective-c和http://stackoverflow.com/questions/2158660/ why-doesnt-objective-c-support-private-methods – 2012-04-25 20:02:49
因此,我應該如何檢查,該消息是從這個對象發送的?也許我應該做一些布爾變量,並在使用方法之前將其設置爲YES? 我發現了一件事。你也可以成爲keypath的一個觀察者,其中關鍵路徑是一些私有屬性。這是令人驚歎的不安全語言。但很酷,無論如何。 – 2012-04-25 20:10:11