Вопрос

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

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

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

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

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

Спасибо.

Это было полезно?

Решение

Возможно, сравнение между "c-подобным" языком и 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 - вы не одиноки.Надеюсь, это сравнение прояснит ситуацию.Это также является примером лингвистической силы objective-c:во время разговора становится ясно, каковы ваши аргументы.Если бы я читал код и увидел вызываемый метод Java, не было бы очевидно, что аргументы красные, синие и зеленые.В obj-c до боли ясно, что мы устанавливаем индивидуальные значения цвета.Конечно, большинство разработчиков могут догадаться, что это за три аргумента метода setColor, но более сложные методы приводят в замешательство.Вот более сложный метод, определенный в Java и objective-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 действительно сложно разобраться с синтаксисом, и тогда это щелчокс и чувствует себя великолепно.Держись там!

Другие советы

Определение метода Objective-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.

Посмотрите на Apple Введение к Objective C.

Основным форматом метода является

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

}

Например:

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

}

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

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

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

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

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

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

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

[object addX:4 toY:7];

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

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

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

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

Цель обучения-C:Букварь

и

Рекомендации по кодированию для Cocoa

Удачи вам!

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

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

Это ТА книга, которую стоит прочитать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top