2011-04-29 3 views

ответ

12

В Objective-C тех называются методами класса, и они предваряются знаком плюс (+)

@interface MyClass : NSObject 

+ (void)myClassMethod; 
- (void)myInstanceMethod; 

@end 
+1

Хорошо, я понимаю, что для метода, но мне нужно статическое свойство тоже ... – Maxime

11

Статические методы в Objective C известны как методы класса и начинаются со знака «+», например:

+ (void)aStaticMethod 
{ 
    // implementation here 
} 

Статические переменные объявляются с использованием ключевого слова static.

+0

Спасибо ... теперь ясно! – Maxime

2

Вы не можете создавать статические свойства автоматически, но вы можете создавать статические методы getter и setter вручную.

+ (NSObject *) myStaticValue; 
+ (void)setMyStaticValue:(NSObject *)value; 
0

Если вы хотите создать статическое свойство, вы создаете переменную класса. свойства используются только для переменной instance. Если вы создаете static, все объекты имеют одну и ту же переменную; Потому что это переменная класса.

вы можете объявить его в файле реализации вашего класса. Он должен соответствовать директиве компилятора @implementation. Но эта статическая переменная может использоваться только внутри своего класса. вы можете использовать его с помощью собственных методов getter-setter, а не по свойству.

2

Как уже отмечалось, статические методы класса начинаются с плюсом (+) в объявлении, например:

@interface MyClass : NSObject 
    + (void)myClassMethod; 
@end 

Objective-C не делает статические свойства так просто, и вы должны прыгать через обручи следующие:

  1. объявить статическую переменную
  2. настроенные методы получения и установки для доступа к нему
  3. сохраняют это значение

Полный пример:

static NSString* _foo = nil; 

@interface MyClass : NSObject 
    + (NSString *)getFoo; 
    + (void)setFoo; 
@end 

// implementation of getter and setter 
+ (NSString *) getFoo { 
    return _foo; 
} 

+ (void) setFoo:(NSString*) value { 
    if(_foo != value) { 
    [_foo release]; 
    _foo = [value retain]; 
    } 
} 

// optionally, you can set the default value in the initialize method 
+ (void) initialize { 
    if(!_foo) { 
    _foo = @"Default Foo"; 
    } 
} 

Я не эксперт Obj-C, но это, кажется, работает хорошо в моем коде. Исправьте меня, если что-нибудь здесь выключено.

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