Простой вопрос Objective-C: почему main - это метод, а не функция? - PullRequest
1 голос
/ 09 ноября 2010

Я работаю над простыми уроками Objective-C для некоторых друзей, и это дало мне очень простой вопрос, на который я не смог ответить.Почему в проекте Foundation Tool main является методом?По крайней мере, это называется " main-method " во всех книгах, которые я прочитал.

Позвольте мне рассказать вам о деталях ... Я сделал небольшую программу, в которой NSMutableArray сортируетсяфункция.Я поставил функцию перед main , и все работает нормально. Моя проблема в том, как объяснить новичку, почему main - это метод, а код для сортировки массива - функция. Трудно увидеть разницу.

Мывсе известные методы всегда принадлежат классам, а функции - нет, но в моем проекте у меня нет классов, только main.m.Парень из C ++, как я, ожидал, что main будет static , но это не так.

Итак, вопрос в том, почему main - это метод, а не функция?Или нет?Или это что-то совершенно другое?

Ответы [ 3 ]

3 голосов
/ 09 ноября 2010

main в Objective-C точно такой же main в C или C ++.Автономная функция, которая является точкой входа в программу.Некоторые книги могут назвать его основным методом, потому что они немного разболтаны в терминологии.

Технически, Objective-C имеет методы, которые вызываются в ответ на сообщения, отправляемые объекту.C ++ имеет функции-члены, которые вызываются напрямую.

3 голосов
/ 09 ноября 2010

Ах .... хорошо, вы смешиваете синтаксис C и Objective-C, я полагаю.

Если в main.m у вас есть следующее:

  void sortArray(NSMutableArray *a)
   {

   }

   int main( const int argc, char** argv )
   {

   }

Тогда я считаю, что правильная терминология заключается в том, что оба они являются вызовами функций в стиле C.Они сохраняются в манере C, а не в объектно-ориентированной манере, как в C ++, C # или Java.Я думаю, вы даже можете создавать переменные и функции C extern.

НО

, если вы вызываете

[array addObject:insert];

Вы вызываете метод Objective-C (invoking a message, технически).Определяется следующим образом.

@interface myClass : NSObject
{
    int myIvar;
}

+ (id) myStaticMethod: (NSObject *)parameter;
- (void) myInstanceMethod: (NSObject *)parameter;

@end

@implementation

+ (id) myStaticMethod: (NSObject *)parameter
{

}

- (void) myInstanceMethod: (NSObject *)parameter
{

}

@end

Надеюсь, это поможет.

0 голосов
/ 20 июня 2012

Нет разницы между функцией и методом, оба одинаковы. У некоторых языков есть некоторая терминология. В C он вызывается как функция, в C ++ он вызывается как функция-член, в java, target-c - как метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...