Какова область действия функции c, определенной в классе target-c? - PullRequest
5 голосов
/ 20 марта 2010

Я читал об обходе сообщений Objective-C для повышения производительности (не относящихся к этому конкретному вопросу), когда нашел интересный фрагмент кода:

#import <Cocoa/Cocoa.h>

@interface Fib : NSObject { }

- (long long) cFib: (NSUInteger) number;

@end

@implementation Fib

// c implementation of fib
long long cFibIMP(NSUInteger number)
{
  return (number < 3) ? 1 : cFib(number - 1) + cFib(number - 2);
}

// method wrapper for c implementation of fib
- (long long) cFib: (NSUInteger) number
{
  return cFibIMP(number);
}

@end

Мой вопрос; при использовании функции c в объекте target-c, в какую область помещается функция c (в данном случае cFibIMP)? Инкапсулирует ли объектjective-c функцию c, удаляя изменение имени-коллизии, или функция c просто сбрасывается в глобальную область действия всей программы target-c?

Ответы [ 2 ]

4 голосов
/ 20 марта 2010

Функции сбрасываются в «глобальную» область.

Вы можете проверить это, добавив новый класс в конце вашего примера кода:

@interface Gib : NSObject {}
@end
@implementation Gib
- (void) t
{
    NSLog(@"%d", cFibIMP(10));
}
@end
1 голос
/ 20 марта 2010

Функция C имеет глобальную область видимости.

Если вы хотите иметь что-то вроде «класса», лучше всего использовать ключевое слово static, которое ограничивает область действия исходного файла, в котором она содержится. Для того вида использования, который вы здесь иллюстрируете, это обычно достаточно близко.

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