#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 не делает статические свойства такими простыми, и вам нужно пройти через следующие этапы:
- объявить статическую переменную
- настройте методы получения и установки для доступа к нему
- сохраните его значение
Полный пример:
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. Но эта статическая переменная может использоваться только внутри своего класса. вы можете использовать его с помощью ваших собственных методов получения-установки, а не по свойству.