Подтвердить что ты не робот

C по сравнению с методом Objective-C?

В чем разница между этими двумя? Если я пишу программу, когда мне понадобится следующее:

void aFunction() {
    //do something
}

и когда мне это нужно:

-(void)aMethod {
    //do something else
}
4b9b3361

Ответ 1

На самом деле, метод 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 изначально был реализован как препроцессор C. Все, что вы можете сделать в Objective-C, можно переписать как прямой C.

Тем не менее, это было бы полной болью в заднице и не стоило бы вам времени, кроме невероятно образовательного опыта этого.

В общем, вы используете методы Objective-C при общении с объектами и функции при работе с прямой C goop. Учитывая, что почти все Mac OS X и iOS предоставляют API-интерфейсы Objective-C, безусловно, полностью для точек входа в программирование уровня пользовательского интерфейса, то вы используете Obj-C большую часть времени.

Даже при написании собственного кода уровня модели, который является относительно автономным, вы обычно используете Objective-C просто потому, что он обеспечивает очень естественный клей между состоянием/данными и функциональностью, основным арендатором объектно-ориентированного программирования.

Ответ 2

В Objective-C каждая функция работает на объекте, например

[myObject myFunction]

Метод A имеет вид:

return-type function-name(argument1, argument2, etc) {}

Метод экземпляра Objective-C имеет форму:

-(return-type)function-name:argument1 {}

или для функции с несколькими аргументами

-(return-type)function-name:argument1 function-name:argument2 {}

Я всегда использую методы Objective-C -style в программировании Obj-C, даже если вы все еще можете использовать функции C-типа.

Я полагаю, что эквивалент от C до [myObject myMethod:arg] может быть myObject.myMethod(arg)

Ответ 3

Первая - это автономная функция. Второй метод экземпляра для класса Objective-C. Поэтому, я думаю, вам понадобится вторая версия, если вы на самом деле пишете класс.