Objective-C вызывает частные методы - PullRequest
1 голос
/ 25 января 2011

Ниже приведен пример закрытого метода в 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"], но выглядит не так.

Ответы [ 2 ]

8 голосов
/ 25 января 2011

Да, [self privateMethod:@"Foo" and:@"Bar"] правильно. Что выглядит неправильно? И почему ты просто не попробовал это?

(Кстати, на самом деле это не приватный метод, он просто скрыт от интерфейса. Любой внешний объект, который знает сигнатуру сообщения, все равно может вызывать его. В Objective-C не существует "настоящих" приватных методов.)

2 голосов
/ 25 января 2011

Попробуйте следующее.«Частные» интерфейсы должны быть объявлены без категории в ().

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
...