0

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

4

2 回答 2

2

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

将该类扩展名移动到它自己的头文件中,例如MyClass_Private.h. 然后#import将该标头同时放入main.mMyClass.m

即移动这个:

@interface MyClass()

- (void)thePrivateMethod;

@end

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


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

此框架或类可以使用私有方法,但可能会向与类更紧密联系的客户端公开,而不是通过公共 API。通常为大型系统(如操作系统)上的框架作者保留。

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

于 2013-10-27T19:00:58.523 回答
0

无论您以何种方式、在 何处 是否声明了一个方法,根本就......如果它存在......调用它就像

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

如果该方法已编译..它将被调用。没有“隐藏”它。即使没有声明,运行时也会将此信息“放弃”给任何相关方。 @see class-dump,如果有兴趣了解更多。

于 2013-10-27T20:29:16.213 回答