2011-01-25 2 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.)

+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 

 Смежные вопросы

  • Нет связанных вопросов^_^