Объективные методы класса C против функций C

Работая над проектом с открытым исходным кодом, я натолкнулся на следующее объявление и реализацию функции C:

// FSNData.h
NSString *stringForMimeType(MimeType type);

@interface FSNData : NSObject
// All the expected objective-c property and instance method declarations
@end

// FSNData.m
#import "FSNData.h"

// where 'type' is an enum
// this does work as expected
NSString *stringForMimeType(MimeType type) {
    switch (type) {
        case MimeType_image_jpeg: return @"image/jpeg";
        case MimeType_image_png:  return @"image/png";
        default:
            NSLog(@"ERROR: FSNData: unknown MimeType: %d", type);

        // do not return "application/octet-stream"; instead, let the recipient guess
        // http://en.wikipedia.org/wiki/Internet_media_type
        return nil;
    }
}

@implementation

// all properties and methods defined in FSData.h implemented as expected

@end

Этот пример может быть легко переписан как метод уровня класса без каких-либо проблем. Как это, используяstringFormMimeType() подоконник требует импортаFSNData заголовочный файл в любом случае.

Смотря надокументы Apple, в нем говорится только:

Поскольку Objective-C опирается на основу ANSI C, вы можете свободно смешивать прямой код C с кодом Objective-C. Более того, ваш код может вызывать функции, определенные в программных интерфейсах не-Какао, таких как интерфейсы библиотеки BSD в / usr / include.

Нет упоминания о том, когда функции C должны отдавать предпочтение методам Objective-C.

Единственное преимущество, которое я вижу в этом пункте, состоит в том, что при вызове вышеупомянутой функции, в отличие от метода класса, некоторые вызовы времени выполнения Objective C будут пропущены. В типичном случае использованияFSNDataэто не дало бы заметного прироста производительности для пользователя (возможно, даже для разработчиков) *.

Какое преимущество существует (кроме стиля кодирования) для предпочтения функции C над методом класса?

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

Ответы на вопрос(2)

Ваш ответ на вопрос