Каков объем c функции, определяемой в объективном-c классе?

Я читал об обходе цели-c's, обменивающейся сообщениями для получения производительности (не важный этому конкретному вопросу), когда я нашел интересный бит кода:

#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 функции, в объективном-c объекте, во что объемом является функция c (cFibIMP в данном случае) помещенный? Объективный-c класс инкапсулирует функцию c, удаление столкновения изменения названия или функции c просто выводится в глобальную область видимости целой объективной-c программы?

5
задан Roja Buck 20 March 2010 в 17:02
поделиться

2 ответа

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

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

@interface Gib : NSObject {}
@end
@implementation Gib
- (void) t
{
    NSLog(@"%d", cFibIMP(10));
}
@end
4
ответ дан 14 December 2019 в 19:09
поделиться

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

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

1
ответ дан 14 December 2019 в 19:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: