Цель C / C статический метод выполнения - PullRequest
4 голосов
/ 01 декабря 2011

Вот метод из класса в некоторых из примеров кода Apple . Почему этот метод определяется как статический метод C, а не как метод класса Objective C или метод класса? В контексте, в котором он используется, я полагаю, что он должен быть максимально быстродействующим. Это почему? Это самый эффективный способ объявить метод?

static BOOL lineIntersectsRect(MKMapPoint p0, MKMapPoint p1, MKMapRect r)
{
    //Do stuff
    return MKMapRectIntersectsRect(r, r2);
}

Ответы [ 2 ]

6 голосов
/ 01 декабря 2011

Это не статический метод, а скорее функция. И, вероятно, он определен как функция, потому что он работает с двумя типами данных (MKMapPoint и MKMapRect), которые не являются объектами (они являются структурами C) и поэтому не могут иметь методы, связанные с ними.

2 голосов
/ 01 декабря 2011

Функции C быстрее, чем методы Objective C, потому что функции C обходят систему обмена сообщениями времени выполнения Objective C. Ключевое слово static в объявлении ограничивает видимость функции текущим модулем компиляции, поэтому она видна только в этом конкретном файле. Компилятор может воспользоваться подсказкой из ключевого слова static, чтобы оптимизировать вывод ассемблера для функции, поэтому можно еще больше повысить производительность.

...