Подтвердить что ты не робот

Как создать статический метод в Objective-C?

В Java у меня может быть класс, например, Utility, и у меня есть статический метод changeToCapitalLetter, поэтому я могу сделать что-то вроде этого:

Utility.changeToCapitalLetter(myString);

Как я могу сделать подобное в Objective C?

Спасибо большое

4b9b3361

Ответ 1

В Objective-C вы называете это "методы класса", см. здесь:

@interface MyClass : NSObject

+ (void)aClassMethod;
- (void)anInstanceMethod;

@end

+ - важная вещь; вы вызываете метод следующим образом: [MyClass aClassMethod];

Ответ 2

Материал из Википедии. Статические методы не требуют экземпляра класса, и они не могут имплицитно обращаться к данным (или это, я, Я, и т.д.) такого экземпляра.

Это точно описывает, что не методы класса Objective-C.

Метод класса Objective-C очень необходим для экземпляра, который является объектом вызова метода. То есть для этого требуется экземпляр метакласса, описывающий вызываемый объект класса.

В отличие от статических методов, методы класса Objective-C могут быть наследованы (что в сочетании с наличием вышеупомянутого "я" именно поэтому многие классы могут совместно использовать одну, простую реализацию + alloc в NSObject, не требуя собственных пользовательских реализаций ) и вызов метода класса проходит через тот же механизм отправки на основе objc_msgSend *, что и любой другой сайт вызова метода.

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

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

    @interface TestClass : NSObject

    +(void)classOrInstanceMethod;
    -(void)classOrInstanceMethod;

    @end

    @implementation TestClass

    +(void)classOrInstanceMethod{
        NSLog(@"%s", __PRETTY_FUNCTION__); 
    }
    -(void)classOrInstanceMethod{
        NSLog(@"%s", __PRETTY_FUNCTION__); 
    }
    @end

    int main(int argc, const char* argv[])
    {
        @autoreleasepool{
            NSLog(@"Static method in ObjectiveC");
        }

        NSArray* arr = [NSArray arrayWithObjects:[[TestClass alloc]init],
                                            [TestClass class], nil];
        for(id obj in arr)
            [obj classOrInstanceMethod];
    }

какая версия классаOrInstanceMethod вызывается, зависит от того, является ли obj объектом класса или экземпляром. Если вы знакомы с шаблоном класса factory, этот шаблон является частью языка Objective-C.

Суть в том, что статические методы и методы класса очень разные. Хотя эта разница в основном прозрачна для повседневных целей кодирования, все еще существуют ситуации, когда знание того, как работают методы класса, может сэкономить массу ненужных строк кода.

Оригнальные ссылки здесь и здесь