Разочарован кодом Objective-c - PullRequest
1 голос
/ 12 марта 2010

Ну, я начал с программирования iPod / iPhone, используя Head First iPhone Development (O'reilly), и я набираю код из книги. Есть две проблемы, одна связана с программированием, а другая нет.

  • Я не понимаю формат методов target-c. Сейчас я получаю несколько ошибок на основе исходного кода из книги. Который ведет меня к моей следующей проблеме.

  • Часть кода содержит ошибки. Я так думаю, потому что я не мог заставить код работать без его изменения. У книги есть некоторые опечатки в тексте, так как это первое издание и так далее, но может ли мое «исправление» кода быть с этим связано?

Итак ... Где я могу узнать больше о методах target-c и о том, как они работают с точки зрения структуры и куда идут возвращаемый тип и аргументы?

Для тех, кто с книгой, я в середине приложения InstaTweet к началу.

Спасибо.

Ответы [ 6 ]

5 голосов
/ 12 марта 2010

Может быть, было бы полезно сравнить между "c-like" языком и obj-c - давайте перейдем к Java. Представьте класс Rectangle с помощью метода setBackgroundColor. Предположим, у нас есть экземпляр Rectangle с именем rect.

В Java сигнатура метода, скорее всего, будет

public void setBackgroundColor(int r, int g, int b) { ... }

В Objective-C аргументы являются частью сигнатуры метода, поэтому это может быть

- (void)setBackgroundColorWithRed:(int)r green:(int)g blue:(int)b;

«-» означает, что это метод экземпляра в классе Rectangle. (void) - тип возвращаемого значения метода. Тогда приходят аргументы. Каждое двоеточие определяет аргумент, который набирается (каждый аргумент (int) в этом примере).

Давайте сравним вызов этих методов. Java:

rect.setBackgroundColor(255, 255, 0);

Obj-C:

[rect setBackgroundColorWithRed:255 green:255 blue:0];

Многие люди натыкаются на синтаксис obj-c - вы не одиноки. Надеюсь, это сравнение сделает вещи более понятными. Это также иллюстрирует лингвистическую силу target-c: во время вызова ясно, каковы ваши аргументы. Если бы я читал код и увидел вызываемый метод Java, не было бы очевидно, что аргументы бывают красного, синего и зеленого цвета. В obj-c до боли ясно, что мы устанавливаем индивидуальные значения цвета. Конечно, большинство разработчиков могут догадаться, каковы три аргумента метода setColor, но более сложные методы приводят в замешательство. Вот более сложный метод, определенный в Java и target-c:

static Dog createDog(  String name
                     , int age
                     , boolean isNeutered
                     , String ownerName
                    );
+ (Dog *)createDogNamed:(NSString *)name 
     age:     (int)        age 
     neutered:(BOOL)       isNeutered 
     owner:   (NSString *) owner;

Во время разговора:

Dog.createDog("Fluffy", 2, true, "Moshe");
[Dog createDogNamed:@"Fluffy" age:2 neutered:YES owner:@"Moshe"];

Objective-c более многословен, но гораздо более читабелен. В примере с Java не совсем понятно, что означают аргументы «2» и «true». Objective-c почти читает как английский.

Другие люди разместили ссылки на более подробные руководства, но я надеюсь, что это поможет вам преодолеть синтаксические камни преткновения, чтобы сделать ссылки полезными. Я рад ответить на более конкретные вопросы, которые у вас есть. По моему опыту, новичкам в obj-c действительно тяжело с синтаксисом, а затем он нажимает с и чувствует себя великолепно. Держись там!

1 голос
/ 12 марта 2010

Я сделал то же самое, что и вы. Я также взял книгу Head First для разработчиков iPhone (включает 3.1 SDK).

Я просмотрел все учебники в нем и обнаружил только 1 ошибку, из-за которой мое приложение не работало (я сделал это в своей книге, но сейчас не могу найти его ...).

Итак, после этого я понял, что у меня точно такая же проблема, как и у вас с синтаксисом.

Я взял «Программирование в Objective-C 2.0» Стивена Г. Кочана. (Это просто великолепно.) Книга ясна и лаконична. Я даже не прошел через 25% книги, и на все мои вопросы были даны ответы.

Чтение кода объективного C приводило меня в негодность в течение нескольких месяцев, потому что я настолько привык к другому синтаксису, что моему мозгу потребовалось некоторое время, чтобы приспособиться к тому, чего ожидает объективный C.

Я обнаружил, что код Objective-C становится действительно читабельным после того, как вы обернетесь вокруг него. Приведенный выше пример Карла Норума - отличная демонстрация читабельности.

[object addX:4 toY:7];

Это не становится намного более читабельным, чем это!

Также некоторая терминология немного отличается. «Передача сообщения об объекте» против «вызова метода» меня тоже отбросила на несколько недель.

Я надеюсь, что рекомендация книги поможет вам, она действительно помогла мне много.

1 голос
/ 12 марта 2010

Определение метода Objective-C довольно просто. На самом деле это довольно похоже на обычное определение вызова функции C. Большим дополнением является возможность именования параметров. Вот пример:

-(int)addX:(int)x toY:(int)y
{
    return x + y;
}

Что вы можете использовать, отправив сообщение на соответствующий объект:

int z = [object addX:x toY:y];

В этом случае я присвоил параметрам и аргументам одинаковые имена, чтобы было понятно, как все устроено. Вы можете так же легко сделать:

int z = [object addX:4 toY:7];

И после этого z будет 11.

1 голос
/ 12 марта 2010

Ознакомьтесь с Apple Введение в цель C .

Базовый формат метода:

-(ReturnType *)methodName:(VariableType *)variableName{

}

Например:

-(NSString *)giveMeANewStringFromAnOldString:(NSString *)oldString{

}

Вам также следует проверить ошибки на сайте книги.

0 голосов
/ 12 марта 2010

Чтение Какао (R) Программирование для Mac (R) OS X (3-е издание) , это Библия для Mac и Какао.

У меня не было никаких проблем с этим, но имейте в виду, что API всегда движется вперед, поэтому могут быть небольшие обновления / изменения. Но я не нашел ничего, что помешало бы мне закончить все примеры кода и упражнения.

Это книга для чтения.

0 голосов
/ 12 марта 2010

Есть несколько отличных учебных ресурсов от Apple:

Цель обучения C: Учебник для начинающих

и

Руководство по кодированию для какао

Удачи!

...