Описание метода static / класса метода target-c - в чем разница между «static» и «+»? - PullRequest
8 голосов
/ 31 января 2011

Мне интересно, может ли кто-нибудь объяснить разницу между функциями ниже. Они оба статические, но требуют различного синтаксиса подписи. Мне интересно, как они обрабатываются во время выполнения и почему вы используете один поверх другого?

+ (int) returnInt:(NSString *)myString1 withString2:(NSString *)myString2
{
    if ([myString1 isEqualToString:myString2])
        return 1;
    else 
        return 0;
}

против

static int returnInt(NSString *myString1, NSString *myString2)
{
    if ([myString1 isEqualToString:myString2])
        return 1;
    else 
        return 0;
}

Спасибо!

1 Ответ

11 голосов
/ 31 января 2011

В отличие от (скажем) C ++, где статические функции-члены являются просто обычными функциями в пространстве имен класса, Objective-C имеет надлежащие методы класса.

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

1) Вызов метода класса влечет за собой небольшие (хотя, как правило, несущественные) издержки, поскольку вызовы метода разрешаются во время выполнения.

2) Методы класса имеют неявный аргумент self, как и методы экземпляра. В их случае 'self' является указателем на объект класса.

3) Методы класса наследуются подклассами.

вместе, 2 и 3 означают, что вы можете делать такие вещи с помощью метода класса:

+ (id) instance
{
    return [[[self alloc] init] autorelease];
}

затем создайте новый класс, который наследует метод и возвращает новый экземпляр самого себя, а не суперкласс.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...