2011-01-25 18 views
1

次はObjective-Cでプライベートメソッドの例です:私はプライベートインターフェイス/メソッドの宣言について読んだObjective-Cの呼び出しプライベートメソッド

MyClass.m

#import "MyClass.h" 


@interface MyClass (Private) 
    -(void) privateMethod:(NSString *)arg1 and: (NSString*)arg2; 
@end 

@implementation MyClass 

    -(void) publicMethod { 
     NSLog(@"public method\n"); 
     /*call privateMethod with arg1, and arg2 ??? */ 
    } 

    -(void) privateMethod:(NSString *)arg1 and: (NSString*)arg2{ 
     NSLog(@"Arg1 %@ and Arg2 %@", arg1, arg2); 
    } 

@end 

。しかし、他のパブリックメソッドからそれらを呼び出す方法は? [self privateMethod:@"Foo" and: @"Bar"]を試しましたが、正しく表示されません。

+0

は、右の私には見えます。 – badgerr

答えて

8

はい、[self privateMethod:@"Foo" and:@"Bar"]は正しいです。それについて何が間違っていますか?なぜあなたはそれを試してみませんでしたか?

(Btw、実際にはプライベートメソッドではなく、インターフェイスから隠されているだけです。メッセージ署名を知っている外部オブジェクトはそれを呼び出すことができます)Objective-Cでは "Real"プライベートメソッドが存在しません。

+0

実際に試してみましたが、クラッシュしました。だからあなた方のすべてが正しいと言うなら、それは他の場所から来るかもしれません。 – Kami

+1

+1は実際にはプライベートではないことを指摘しています。 –

+2

実際には、空のカテゴリからプライベートメソッドをシミュレートできます。遠い議論のために[ここ](http://stackoverflow.com/questions/172598/best-way-to-define-private-methods-for-a-class-in-objective-c) –

2

以下を試してください。には、「プライベート」インターフェイスをカテゴリなしで宣言する必要があります。

MyClass.h

@interface MyClass : NSObject 
    -(void) publicMethod; 
@property int publicInt; 
@end 

MyClass.m

#import "MyClass.h" 

@interface MyClass() 
    -(void) privateMethod:(NSString *)arg1 and: (NSString*)arg2; 
@property float privateFloat; 
@end 

@implementation MyClass 

@synthesize publicInt = _Int; 
@synthesize privateFloat = _pFloat; 

    -(void) publicMethod { 
     NSLog(@"public method\n"); 
     /*call privateMethod with arg1, and arg2 ??? */ 
     [self privateMethod:@"foo" and: @"bar"]; 
    } 

    -(void) privateMethod:(NSString *)arg1 and: (NSString*)arg2{ 
     NSLog(@"Arg1 %@ and Arg2 %@", arg1, arg2); 
    } 

@end 
関連する問題