Obiektywne metody klasy C a funkcje C

Podczas pracy nad projektem open source natrafiłem na następującą deklarację i implementację funkcji 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

Ten przykład można z łatwością przepisać jako metodę klasy bez żadnego problemu. Jak to jest, używającstringFormMimeType() parapet wymaga importuFSNData plik nagłówkowy i tak.

Patrzeć nadokumenty Apple, stwierdza tylko:

Ponieważ Objective-C opiera się na podstawie ANSI C, można swobodnie łączyć prosty kod C z kodem Objective-C. Co więcej, twój kod może wywoływać funkcje zdefiniowane w interfejsach programowych innych niż Cocoa, takich jak interfejsy biblioteki BSD w / usr / include.

Nie ma wzmianki o tym, kiedy funkcje C powinny faworyzować metody Objective-C.

Jedyną korzyścią, jaką widzę w tym momencie, jest to, że wywołanie powyższej funkcji, w przeciwieństwie do metody klasowej, niektóre wywołania wykonawcze Objective-C zostałyby pominięte. W typowym przypadku użyciaFSNData, nie dałoby to zauważalnego zwiększenia wydajności dla użytkownika (prawdopodobnie nawet dla programistów) *.

Jakie korzyści istnieją (poza stylem kodowania) dla faworyzowania funkcji C w porównaniu z metodą klasową?

*FSNData jest używany jako częśćFSNetworking biblioteka, więc wątpię, aby podczas cyklu życia aplikacji były wykonywane tysiące operacji sieciowych.

questionAnswers(2)

yourAnswerToTheQuestion