MyClass.h文件
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
{
// This is the Place of Instance Variable
}
- (void)thePublicMethod;
@end
MyClass.m文件
#import "MyClass.h"
@interface MyClass()
- (void)thePrivateMethod;
@end
@implementation MyClass
-(void)thePublicMethod {
NSLog(@"Public Method Called");
}
- (void)thePrivateMethod {
NSLog(@"Private Method Called");
}
@end
main.m文件
#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访问thePrivateMethod,也可以从thePublicMethod()调用thePrivateMethod()是否可能以及如何?
答案 0 :(得分:2)
如果要从类的实现之外的某个位置访问内部方法,则需要将其真正声明为私有方法。
将该类扩展名移动到自己的头文件,例如MyClass_Private.h
。然后#import
标题为main.m
和MyClass.m
。
即。移动这个:
@interface MyClass()
- (void)thePrivateMethod;
@end
在MyClass_Private.h
和#import "MyClass_Private.h"
个文件中加入名为MyClass.m
然后main.m
的文件。
内部表示仅用于此框架或类的内部。
私有表示此框架或类可能会使用,但可能会向与公共API 密切相关的客户端公开。通常保留给大型系统(如操作系统)上的框架作者。
公开表示可以在班级的任何客户的任何地方使用。
答案 1 :(得分:0)
无论如何 或 或IF ,您都声明了一个方法,如果它< strong>存在 ..调用它就像
一样简单[myInstance performSelector:NSSelectorFromString(@"yourSuperSecretMethod:")
withObject:myKillerObject];
如果方法已编译..它将被调用。没有“隐藏”它。即使没有声明,运行时也会“放弃”此信息给任何感兴趣的一方。 @see class-dump,如果有兴趣了解更多信息。