关于objective c:访问.m文件中定义的接口方法

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


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

把这个类扩展名移动到它自己的头文件,比如MyClass_Private.h。然后,#import该头段同时进入main.mMyClass.m

即移动:

1
2
3
4
5
@interface MyClass()

- (void)thePrivateMethod;

@end

在你的MyClass.mmain.m文件中,输入一个名为MyClass_Private.h#import"MyClass_Private.h"的文件。


内部的意思是只在这个框架或类的内部使用。

私有方法可以由这个框架或类使用,但是可以暴露给比通过公共API更紧密地与类联系在一起的客户机。通常为大型系统(如操作系统)上的框架作者保留。

公共手段可以被类中的任何客户在任何地方使用。


无论您如何、在哪里或如果您声明一个方法,都是如此。如果它存在……称之为

1
2
[myInstance performSelector:NSSelectorFromString(@"yourSuperSecretMethod:")
                 withObject:myKillerObject];

如果方法已编译..它会被呼叫的。没有"隐藏"它。即使没有声明,运行时也会将此信息"放弃"给任何相关方。@如果有兴趣了解更多,请参阅课程转储。