Что такое Objective-C, эквивалентный main ()? - PullRequest
2 голосов
/ 27 января 2010

Я только начинающий в Objective-C, и его синтаксис просто выбивает меня из колеи.

Я «пытаюсь» работать на iphone 3.0.

До тех пор, пока я не узнал, что:

  1. есть файл .h, который содержит декларация для каждого класса; как мы есть в C ++, где мы можем объявить имя переменных / поля_данных а затем определить функции / методы снаружи
  2. * Функции / методы объявлены в файле .m, поэтому для каждого класса будет файл .h, файл .m и файл .xib

Так как же мы называем функции / методы по нашему выбору?

В старом добром языковом формате C, C ++, JAVA, C # у нас есть функция main (), которая выполняет наш контроль, но что эквивалентно ей main () здесь в Obj-c?

Я знаю, что есть функция main (), но я не знаю, как она работает.

Ответы [ 3 ]

10 голосов
/ 27 января 2010

Основная функция запускает цикл событий основной программы, обычно вы его не трогаете.

AppDelegate - это место, куда вы хотите поместить свой собственный код пользователя. Если вы сгенерируете пример проекта iPhone под названием Sample, вы создадите класс с именем SampleAppDelegate, у него есть метод с именем - (void)applicationDidFinishLaunching:(UIApplication *)application, который является точкой входа, которую, я думаю, вы ищете.

Класс SampleAppDelegate реализует делегат (например, интерфейс в c #) из UIApplicationDelegateProtocol , некоторые из методов являются необязательными, но applicationDidFinishLaunching не является. Как правило, именно здесь вы настраиваете свой первый контроллер вида, чтобы сделать свой начальный экран.

Вызов метода осуществляется через передачу сообщений. Если у меня есть класс Tom с методом print, я инициализирую и вызываю метод следующим образом:

Tom *tom = [[Tom alloc]init];
[tom print];

о нет, куда делись аргументы моего метода? Я чувствую себя потерянным без скобок.

Если у меня есть метод, который печатает номера страниц и возвращает void, я мог бы определить его как таковой

-(void)printPageNumbers:(int)pageNumber{   
}

и назовите это так

Tom *tom = [[Tom alloc]init];
[tom printPageNumbers:2];

несколько параметров

-(void)printPageNumbersFrom:(int)fromPageNumber toPageNumber:(int)toPageNumber{
}

и назовите это

Tom *tom = [[Tom alloc]init];
[tom printPageNumbersFrom:2 toPageNumber:5];

Это не очень безопасный язык, вы можете делать что-то напуганное, например, если у вас есть массив объектов Tom, вы можете просто отправить одному из них сообщение. Если во время выполнения окажется, что объект в массиве не является Томом, вы получите исключение.

   [[myArray objectAtIndex:0] printPageNumbersFrom:2 toPageNumber:5];

Некоторые комментарии к вышесказанному «поэтому для каждого класса будет .h файл .m файл .xib файл» - это неверно. У каждого класса есть «.h» и «.m».

.xib - это файл представления, если в вашем классе нет элемента пользовательского интерфейса, он не будет иметь .xib. '.xib', называемый nib-файлом, в любом случае не является частью класса, он просто ссылается на него. (вы связываете два)

Я нашел кривую обучения довольно крутой. Objective-C не является жестким языком, если у вас есть C и некоторая поддержка OO. Однако соединить все это с пользовательским интерфейсом может быть немного больно. У Стэнфордского университета есть онлайн-курс, который они распространяют через iTunes U Я посмотрел их все, что они того стоят, см. здесь

наслаждайся кривой, я рад, что я не сижу там, где ты есть:)

3 голосов
/ 27 января 2010

Вы действительно должны сначала изучить вводную документацию на веб-сайте Apple для разработчиков. Иногда очень полезно прорабатывать вещи систематически, когда вы начинающий: Цель обучения C: Учебник для начинающих а также Ваше первое приложение для iPhone

1 голос
/ 27 января 2010

Я думаю, что разработка iPhone представляет две проблемы для программистов, имеющих опыт работы с другими языками / API:

  1. API делает для вас так много, что трудно понять, как на самом деле структурирована программа. Люди привыкли запускать приложения с нуля, ожидая, что им придется проделать гораздо больше работы, чтобы запустить приложение.
  2. Технология Interface-Builder / nib скрывает много сложностей, с которыми привыкли иметь дело опытные программисты. Кажется, что представления, контроллеры и т. Д. Просто появляются из ниоткуда в классах.

В результате, опытные программисты всегда чувствуют, что что-то упустили при изучении API, потому что ожидают скрытой сложности.

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