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.mにしMyClass.mます。

つまり、これを移動します:

@interface MyClass()

- (void)thePrivateMethod;

@end

という名前のファイルに入れMyClass_Private.h、次に#import "MyClass_Private.h"yourMyClass.mmain.mfiles の両方に入れます。


内部とは、このフレームワークまたはクラスの内部でのみ使用されることを意味します。

プライベート手段は、このフレームワークまたはクラスによって使用される場合がありますが、パブリック API を介するよりもクラスに密接に結び付けられているクライアントに公開される場合があります。通常、大規模なシステム (OS など) のフレームワーク作成者のために予約されています。

公開手段は、クラスの任意のクライアントによってどこでも使用できます

于 2013-10-27T19:00:58.523 に答える
0

メソッドを宣言する方法、場所、または IFに関係なく、メソッドが存在する場合は、呼び出しは次のように簡単です。

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

メソッドがコンパイルされた場合..呼び出されます。それを「隠す」ことはありません。宣言されていない場合でも、ランタイムはこの情報を関係者に「放棄」します。 詳細を知りたい場合は@see class-dump 。

于 2013-10-27T20:29:16.213 に答える