Объективные методы класса 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 библиотека, поэтому я сомневаюсь, что в течение жизненного цикла любого приложения будут выполняться тысячи и тысячи сетевых операций.