Использование макросов C для создания кода в стиле C, который отображается на вызовы сообщений Objective-C?

Я уверен, что я получу 20 человек, которые скажут: «Зачем вам это все равно?» ... но я собираюсь задать свой вопрос ни разу - тем не менее, потому что он носит академический характер.

Я хотел бы использовать макросы C, чтобы переопределить [ClassName new] во что-то вроде: new (ClassName) , и мне интересно, как это сделать. Мне не очень комфортно работать с макросами C с самого начала (я знаю - стыдно - мне должно быть) - и мне определенно неудобно смешивать их с моим кодом Objective-C. Итак, перейдем к вопросу ...

Во-первых, поскольку это препроцессор, могу ли я сделать простую замену вроде такой:

#define new(x) [x new]

или, по какой-то причине, мне нужно перейти к среде выполнения objective-c , и сделайте что-то более похожее на:

#define new(x) objc_msgSend(class_createInstance(x, 0), sel_registerName("init"))

Какие недостатки в этом?

Часто ли такие вещи используются другими, или кто-то посмотрит на это и скажет: «Что, черт возьми, ты делаешь? там"? (и должен ли я заботиться)

Спасибо

РЕДАКТИРОВАТЬ:

Мне пришло в голову после публикации этого, что я, на самом деле, видел такие вещи раньше - в библиотеке Three20, где они делают такие вещи, как это:

#define TT_RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }
#define TT_INVALIDATE_TIMER(__TIMER) { [__TIMER invalidate]; __TIMER = nil; }

// Release a CoreFoundation object safely.
#define TT_RELEASE_CF_SAFELY(__REF) { if (nil != (__REF)) { CFRelease(__REF); __REF = nil; } }

Так что, вероятно, мой вопрос будет простым; Каковы недостатки этого, и является ли это относительно принятой практикой или что-то, что доставит мне больше неприятностей, чем оно того стоит?

7
задан Steve 28 October 2011 в 20:27
поделиться