Я новичок в Objective-C, и я прошел через многие темы. Каковы ключевые концепции, на которых я должен уделять больше внимания разработке iPhone Apps?
Каковы основные понятия для iPhone Developer, чтобы учиться?
Ответ 1
Существует ряд концепций, которые составляют основы разработки iOS. Существуют схемы кодирования, методы и некоторые общие лакомые кусочки, о которых вы должны знать.
Шаблоны кодирования:
-
Наблюдение за ключевыми значениями (KVO). Позволяет одному объекту реагировать на изменения других свойств объекта, регистрируя "Наблюдатель" с "целевым" объектом. Подробнее о KVO см. В Apple Руководство по программированию по наблюдению за ключевыми значениями.
-
Шаблон диспетчера моделей Model. В объектах шаблона контроллера модели (MVC) обычно вписываются в одну из трех ролей. У вас есть модель, которая на самом базовом уровне - ваши данные. (Или, точнее, как структурированы данные.) У вас есть представление, которое пользователь видит на экране. Наконец, у вас есть контроллер, который координирует между моделью и представлением. Контроллер - это то, где обычно идет ваша бизнес-логика. Apple также имеет документацию по MVC.
-
Шаблоны Singleton: Singleton (что оксюморон, "singleton classes" ) - это классы, которые могут иметь только один экземпляр из них в приложении за раз. Синглтоны хороши для "factory классов" или объектов, которые вам не нужны. Класс
UIDevice
, например, является одноэлементным классом. (Ваш iPhone не является iPad и iPhone в то же время, не так ли?) В IOS SDK для одноэлементных классов часто используется специальный инициализатор. Вместо обычных[[Class alloc] init]
синглтоны часто используют[SingletonClass sharedInstance]
. ( "общий" экземпляр, поскольку экземпляр "разделен" в вашем приложении.) Обратите внимание, что классы Singleton работают немного по-другому в отношении управления памятью.
Методы кодирования:
-
Делегирование. Многие объекты в SDK iOS имеют объекты-делегаты, которые отвечают определенным "событиям" объекта, для которого они "делегируют". Например, у вас может быть
UIPickerView
(прокручивающееся колесо с множеством вариантов на нем). Когда пользователь выбирает дату, делегат (другой объект, кроме UIPickerView) реализует– pickerView:didSelectRow:inComponent:
, что позволит этому объекту что-то делать в ответ на действие. -
Управление памятью. В отличие от многих языков, будь то Java, Javascript или что-то среднее между ними, обычно управляйте памятью для вас. В iOS Objective-C этого не делает. Вам нужно отслеживать все ваши объекты и освобождать их, когда вы закончите с ними. Эмпирическое правило состоит в том, что для каждого
alloc
,retain
,new
иcopy
у вас должен быть соответствующийrelease
илиautorelease
. ( Заметка об авторекламе: У людей часто возникают проблемы с пониманиемautorelease
. Вообще говоря, локальные "автореализованные" объекты гарантированно будут находиться до конца вызова метода. Конечно, если вы сохраните объект в другом месте, он все равно будет иметь ссылку с этой точки.) -
ARC. С помощью SDK iOS 5 Apple представила автоматический подсчет ссылок. Важно понять, как это работает, даже если вы планируете работать с ручным подсчетом ссылок. Вы никогда не знаете, когда вы столкнетесь с ARCified кодом, с которым вам нужно будет работать.
-
Сохранение данных. Многие люди, которые начинают работу, также имеют проблемы с сохранением данных между запусками. У вас есть три варианта, в зависимости от типа данных. Вы можете использовать NSUserDefaults, каталог документов (или одну из нескольких других папок в иерархии каталога приложений) или Основные данные. Вы также используете их в сочетании друг с другом, поскольку они не являются взаимоисключающими.
Основные понятия:
-
IBOutlets и IBActions:
IBAction
иIBOutlet
являютсяtypedef
дляvoid
.IBAction
методы возвращаютvoid
и помечены какIBAction
, так что Interface Builder может позволить вам присоединить их к объектам в ваших файлах NIB.IBOutlet
являются "заполнителями" кода, которые используются, чтобы позволить вам устанавливать свойства или иным образом взаимодействовать с объектами в ваших файлах NIB с помощью кода Objective-C. -
Символ @: Символ
@
представляет константы Objective-C, так как Objective-C является надмножеством или Framework поверх C. В C строковая константа будет"My string is cool."
. В Objective-C это будет@"My string is cooler in Objective-C."
Другими примерами символа@
, используемого для различения между C и Objective-C, являются ключевые слова, такие как@implementation
,@property
,@class
и@end
. -
Указатели: Дэйв ДеЛонг объясняет это в своем ответе, но это еще что-то, чтобы убедиться, что вы тоже знаете.
Наконец, я оставляю вам совет:
Хотя у вас есть StackOverflow, и это действительно замечательный ресурс, умеет использовать Apple Documentation. Наслаждайтесь путешествием и удачи Начало работы!
Удачи!
Ответ 2
Они не обязательно специфичны для разработки iPhone, но без них вы никогда не получите его.
-
Указатели - знаете, что такое указатель. Знайте, почему нам нужна динамически распределенная память по сравнению с статически выделенной памятью. (Я знаю, это может показаться тривиальным, но, по моему опыту, это первая вещь, с которой сталкиваются новички). Это потому, что вы никогда не будете иметь дело с необработанными объектами в Objective-C. Вы всегда имеете дело с ссылками на объекты. (т.е. вы никогда не имеете дело с
NSString
, но всегдаNSString *
). Однако есть вещи, которые похожи на объекты, но на самом деле их нет.NSRect
- это структуры, и они могут быть выделены в стек.NSInteger
является просто atypedef
для примитиваint
. Если вы не знаете, что такое указатель, вы сойдете с ума, если хотите, чтобы вы ввели*
, а когда нет. -
Управление памятью. iPhone не содержит сборку мусора. Вы должны вручную управлять своей памятью. Примите это и продолжайте. Правила для правил управления памятью в Objective-C тривиальны. Запомните их и всегда помните, чтобы использовать их.
* единственный раз, когда вы будете заниматься объектами, выделенными стекем, будут блоки (^{ ... }
) или когда вы делаете что-то дьявольски коварное.
Ответ 3
Для разработки успешных приложений для iPhone вам нужно знать больше, чем обычно предлагаемые рекомендации Objective C. Практики Objective C, знание правил делегирования и правил управления памятью очень важно для разработки iPhone.
В интерфейсе Cocoa Touch есть много и много API-интерфейсов. Чем больше API, с которыми вы знакомы, и играли, тем лучше. Это само по себе может занять значительное количество времени.
Вы должны узнать, что инфраструктура, управляемая событиями, такая как Cocoa Touch в основном вызывает ваше приложение, а не наоборот.
Вы должны узнать, как дизайн пользовательского интерфейса работает по-разному на сенсорных устройствах с крошечными дисплеями. Слишком мало разработчиков видят, могут ли их бабушка (et.al.) носить толстые три фокалы даже увидеть некоторые из своих значков. Или можно управлять ли пользовательским интерфейсом при использовании устройства в одиночку при ходьбе. Etc.
Вы должны научиться разрабатывать для ограниченной системы. У мобильного устройства, вероятно, нет, по-видимому, бесконечного количества резервной памяти. Таким образом, вам нужно научиться измерять и сильно контролировать область памяти приложения. И батарея на маленьком устройстве прослужит намного дольше, если ваши приложения могут оставить процессор в основном бездействующим. Поэтому вам захочется узнать, как профилировать ваши алгоритмы и как выбирать эффективные.
Я предлагаю получить более раннее устройство iOS с более низким сроком службы и научиться правильно работать с приложениями под этими ограничениями. (Я слышал, что Apple использовала это внутренне как часть своего обучения.)