Accessing interface method defined in .m file
MyClass文件
1 2 3 4 5 6 7 8 9 | #import <Foundation/Foundation.h> @interface MyClass : NSObject { // This is the Place of Instance Variable } - (void)thePublicMethod; @end |
MyClass文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #import"MyClass.h" @interface MyClass() - (void)thePrivateMethod; @end @implementation MyClass -(void)thePublicMethod { NSLog(@"Public Method Called"); } - (void)thePrivateMethod { NSLog(@"Private Method Called"); } @end |
主文件
1 2 3 4 5 6 7 8 9 10 11 12 13 | #import <Foundation/Foundation.h> #import"MyClass.h" int main(int argc, const char * argv[]) { @autoreleasepool { MyClass *myObj = [[MyClass alloc] init]; [myObj thePublicMethod]; // [myObj thePrivateMethod]; } return 0; } |
因为"私有"方法可以通过在类的实现文件中定义它们,同时从接口文件中省略它们来创建。我想从main.m访问privatemethod,也可以从publicmethod()调用privatemethod()是否可行以及如何实现?
如果要从类实现之外的其他地方访问内部方法,则需要将其真正声明为私有方法。
把这个类扩展名移动到它自己的头文件,比如
即移动:
1 2 3 4 5 | @interface MyClass() - (void)thePrivateMethod; @end |
在你的
内部的意思是只在这个框架或类的内部使用。
私有方法可以由这个框架或类使用,但是可以暴露给比通过公共API更紧密地与类联系在一起的客户机。通常为大型系统(如操作系统)上的框架作者保留。
公共手段可以被类中的任何客户在任何地方使用。
无论您如何、在哪里或如果您声明一个方法,都是如此。如果它存在……称之为
1 2 | [myInstance performSelector:NSSelectorFromString(@"yourSuperSecretMethod:") withObject:myKillerObject]; |
如果方法已编译..它会被呼叫的。没有"隐藏"它。即使没有声明,运行时也会将此信息"放弃"给任何相关方。@如果有兴趣了解更多,请参阅课程转储。