На самом деле, метод Objective-C - это просто функция C с двумя аргументами, всегда присутствующими в начале.
Это:
-(void)aMethod;
Точно эквивалентно этому:
void function(id self, SEL _cmd);
Обмен сообщениями в Objective-C таков:
[someObject aMethod];
Точно эквивалентно этому (почти - существует проблема ABI с переменным аргументом, выходящая за рамки этого ответа):
objc_msgSend(someObject, @selector(aMethod));
objc_msgSend () находит соответствующую реализацию метода (просматривая его на someObject
), а затем, с помощью магии оптимизации хвостового вызова, переходит к реализации метода, которая, для всех намерений и целей, работает точно так же, как вызов функции C, который выглядит следующим образом:
function(someObject, @selector(aMethod));
Буквально, Objective-C изначально был реализован как не что иное, как препроцессор Си. Все, что вы можете сделать в Objective-C , можно переписать как прямое C.
Однако сделать это было бы полной болью в заднице и не стоить вашего времени, кроме невероятного образовательного опыта.
<Ч />
Как правило, вы используете методы Objective-C при обращении к объектам и функции при работе с прямым C-циклом. Учитывая, что почти все Mac OS X и iOS предоставляют API-интерфейсы Objective-C - конечно, полностью так же, как и для точек входа в программирование на уровне пользовательского интерфейса - тогда вы будете использовать Obj-C большую часть времени.
Даже при написании собственного кода уровня модели, который является относительно автономным, вы, как правило, будете использовать Objective-C просто потому, что он обеспечивает очень естественную связь между состоянием / данными и функциональностью, фундаментальным арендатором объектно-ориентированного программирования.