1

以下は、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"]たが、正しくありません。

4

2 に答える 2

8

はい、[self privateMethod:@"Foo" and:@"Bar"]正しいです。何が悪いように見えますか?そして、なぜあなたはそれを試してみなかったのですか?

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

于 2011-01-25T13:28:23.810 に答える
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
于 2011-01-25T13:34:27.663 に答える