Когда следует использовать сообщения против функций стиля C?
Сообщения в стиле Smalltalk и функции стиля C
Ответ 1
Objective-c делает это различие для вас. Сообщения должны быть отправлены объектам, но функции могут быть использованы в любое время.
Objective-c сообщения могут отправляться только объектам, а система обмена сообщениями - это способ вызова методов класса.
Пример:
// a class interface definition
// including a method named aMethod
@interface ANObject
{
}
- (void)aMethod;
@end
// a message sent to that object:
ANObject * myObject = [[ANObject alloc] init];
[myObject aMethod]; // <-- message
[myObject release];
Функции
Objective-c наследует весь язык C, поэтому вызовы функций C-стиля поддерживаются и даже поощряются, когда ситуация требует их. Objective-C объекты просто передаются как указатели, поэтому вы можете передать их в функции как аргументы. Обычные предостережения и правила о прохождении указателей на функции должны, конечно, соблюдаться.
Пример:
// a regular C-style function
void someFunction(ANObject * argument)
{
// do something here...
}
// and how to call it:
someFunction(someObject);
, когда использовать каждый?
Используйте сообщения/методы, если вы хотите получить доступ к некоторым свойствам объекта/класса. Хорошими примерами будут доступ к длине NSString:
int stringLength = [myString length];
Установка значения свойства:
[myObject setHidden:YES];
Или указать объекту выполнение какой-либо задачи:
[myAccount withdrawMoneyAndDriveToMexico];
Используйте C-style функции, если вы хотите выполнить задачу, не принадлежащую классу; то, что должно стоять в одиночестве. Хорошими примерами были бы математические функции, такие как:
double degrees = ConvertRadiansToDegrees(radians);
Ответ 2
В основном, используйте сообщения в любое время, когда вы имеете дело с компонентом Objective C; более или менее в любое время, когда вы используете тип NS *.
Под обложками вы в любом случае используете вызовы функций C; первоначальная реализация Objective C была препроцессором C. Но вся цель использования Objective C - получить синтаксис Smalltalk, который есть у вас где-нибудь внутри [].
Ответ 3
Вы задали много вопросов Java; возможно, аналогия Java поможет. Где можно использовать метод в Java, используйте сообщение в Objective-C. Если вы используете статический метод в Java, используйте метод класса в Objective-C. Если вы обнаружите, что создаете пакеты утилиты на Java, которые полны статических методов, это может быть смысл как функция в Objective-C.
И, конечно, это может иметь смысл, если вы тоже делаете странные вещи Objective-C ++.