2012-06-30 2 views
-1

В чем разница использования:Цель-C: В чем разница между + и - в геттерах и сеттерах?

+ (id) myMethod; 

// Rather than 
- (id) myMethod; 
+0

Возможный дубликат [Что означают знаки плюс и минус в Objective C рядом с методом?] (htt p: //stackoverflow.com/questions/2097294/what-do-the-plus-and-minus-signs-mean-in-objective-c-next-to-a-method) – vikingosegundo

ответ

1

Использование + объявляет метод как метод класса или метод, который можно назвать прямо в классе, где класс is объект. Поэтому, когда у вас есть это:

@implementation Foo 
+(NSString*)method1 { 
    return @"Foo"; 
} 
-(NSString*)method2 { 
    return @"Foo"; 
} 
@end 

методы называются по-разному:

[Foo method1]; //=> @"Foo" 
Foo* f=[[Foo alloc] init]; 
[f method2]; //=> @"Foo" 

Еще одна вещь, чтобы отметить, что методы класса не имеют доступа к экземпляру, а это означает, что они могут 't получить доступ к любым переменным экземпляра.

+1

... и, следовательно, методы класса не являются геттерами. Это просто классные методы. Кроме того, ваш пример будет более ясным, если два метода вернут разные значения. –

+0

@KenThomases: Точно. – Linuxios

0

Верхний представляет собой метод класса (экземпляра требуется) Вторая переменная экземпляра (прилагается к определенному экземпляру).

Этот ответ объясняет методы довольно хорошо:

Method Syntax in Objective C

[MyObject myMethod]; // did not have to create an instance 

MyObject* myNewObject = [[MyObject alloc] init] autorelease]; 
[myNewObject myMethod]; // had to create an instance 
1

@ Linuxios в значительной степени подытожил концепцию класса и метода экземпляра. Однако, поскольку вы упомянули геттеры и сеттеры в своем названии, я хочу указать, что в Objective-C вы можете использовать свойства вместо написания собственных методов доступа. Например,

В файле заголовка, вы будете иметь что-то вроде этого:

@interface MyObject : NSObject 
@property (nonatomic,retain) NSSet* mySet; 
@end 

В файле м, вы Виль иметь что-то вроде этого:

@implement MyObject 
@synthesize mySet; 
@end 

Чтобы получить доступ к сет другой класс вы можете сделать это следующим образом:

myObject.mySet; // assuming myObject is an instance of the MyObject class 
Смежные вопросы