Сообщения в стиле Smalltalk и функции стиля C

Когда следует использовать сообщения против функций стиля C?

Ответы

Ответ 1

Objective-c делает это различие для вас. Сообщения должны быть отправлены объектам, но функции могут быть использованы в любое время.

messages:

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 ++.