«Статический класс в Objective C»

#iphone #objective-c

#iPhone #objective-c

Вопрос:

Мне нужно знать, как я могу создать статический метод и статическое свойство, подобные static method в java…

Спасибо

Maxime

Ответ №1:

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

 @interface MyClass : NSObject

  (void)myClassMethod;
- (void)myInstanceMethod;

@end
  

Ответ №2:

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

   (void)aStaticMethod 
{
    // implementation here
}
  

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

Ответ №3:

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

 @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, но, похоже, это хорошо работает в моем коде. Поправьте меня, если что-то здесь не так.

Ответ №4:

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

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

Ответ №5:

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

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