访问.m文件中定义的接口方法

时间:2013-10-27 18:58:57

标签: objective-c

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()是否可能以及如何?

2 个答案:

答案 0 :(得分:2)

如果要从类的实现之外的某个位置访问内部方法,则需要将其真正声明为私有方法。

将该类扩展名移动到自己的头文件,例如MyClass_Private.h。然后#import标题为main.mMyClass.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,如果有兴趣了解更多信息。