В чем разница между этими двумя? Если я пишу программу, когда мне понадобится следующее:
void aFunction() {
//do something
}
и когда мне это нужно:
-(void)aMethod {
//do something else
}
В чем разница между этими двумя? Если я пишу программу, когда мне понадобится следующее:
void aFunction() {
//do something
}
и когда мне это нужно:
-(void)aMethod {
//do something else
}
На самом деле, метод 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 просто потому, что он обеспечивает очень естественный клей между состоянием/данными и функциональностью, основным арендатором объектно-ориентированного программирования.
В 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)
Первая - это автономная функция. Второй метод экземпляра для класса Objective-C. Поэтому, я думаю, вам понадобится вторая версия, если вы на самом деле пишете класс.