Ресурсы Интернета

Интернет и поисковая система Google значительно облегчили процесс программирования.

Подробнее...

Жизненный цикл проекта

В этой главе мы рассмотрим некоторые из основных этапов жизненного цикла проекта в среде Xcode: от задумки до представления в магазин Арр Store.

Подробнее...

Архитектура устройства и условный код

Во время создания проекта (FileONewO Project), после выбора шаблона проекта, на экране, в котором вводится имя проекта, появляется раскрывающийся список Devices, содержащий пункты iPad, iPhone или Universal.

Подробнее...

Управление версиями

Рано или поздно в жизни реального приложения наступает момент, когда приходится включать проект в систему управления версиями.

Подробнее...

Редактирование кода

Многие аспекты среды редактирования в системе Xcode можно настроить по своему усмотрению.

Подробнее...

Автоматическое дополнение

Когда вы пишете код, вы можете использовать возможность автоматического дополнения в среде Xcode.

Подробнее...

Сниппеты

Механизм автоматического дополнения кода сопровождается сниппетами кода.

Подробнее...

Механизм fix-it и прямая синтаксическая проверка

В среде Xcode есть чрезвычайно мощный механизм Fix-it, который может создавать и реализовывать предложения по предотвращению проблем.

Подробнее...

Навигация по коду

Разработка проекта в среде Xcode подразумевает редактирование кода во многих файлах одновременно.

Подробнее...

Выполнение приложения в симуляторе

Для того чтобы собрать и выполнить приложение в симуляторе, создается целевое приложение типа IOS Simulator application.

Подробнее...

Грубая отладка

Отладка — это искусство обнаружения ошибок во время выполнения приложений. Это искусство можно разделить на два основных метода: грубая отладка и остановка во время выполнения.

Подробнее...

Отладчик среды Xcode

Собирая и выполняя приложение в среде Xcode, вы можете остановить его выполнение с помощью отладчика и использовать его возможности.

Подробнее...

Модульное тестирование

Модульный тест — это код, не являющийся частью целевого приложения. Он предназначен для проверки работоспособности фрагмента целевого приложения.

Подробнее...

Статический анализатор

Время от времени следует использовать статический анализатор для выявления возможных источников ошибок в вашем коде.

Подробнее...

Чистка

Периодически во время повторяющихся сеансов тестирования и отладки и перед сборкой (при переключении с режима Debug на режим Release или при запуске приложения на устройстве, а не в симуляторе) целесообразно очистить цель.

Подробнее...

Выполнение приложения на устройстве

Рано или поздно вы перейдете от тестирования, отладки и выполнения приложения с помощью симулятора на реальное устройство.

Подробнее...

Получение сертификата

Настройка идентификации и получение сертификата выполняются только один раз (или не чаще одного раза в год; эти процедуры, возможно, придется повторить при возобновлении членства в программе Developer Program).

Подробнее...

Получение профиля обеспечения разработки

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

Подробнее...

Выполнение приложения

Имея профиль для разработки приложения и устройство (или в случае универсального командного профиля — все приложения и все зарегистрированные устройства), подсоедините устройство, выберите его в качестве цели в раскрывающемся списке Scheme, а затем соберите и выполните приложение.

Подробнее...

Управление профилем и устройством

В среде Xcode 5 центральным местом для обзора идентификаторов и профилей обеспечения является окно настроек Accounts. Выберите Apple ID и команду, а затем команду View Details.

Подробнее...

Индикаторы и инструменты

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

Подробнее...

Локализация

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

Подробнее...

Архивирование и распространение

Под распространением (distribution) подразумевается предоставление возможности лицам, не являющимся разработчиками из вашей команды, собирать приложение для выполнения на своем устройстве.

Подробнее...

Ситуативное распространение

Документация компании Apple утверждает, что сборка, предназначенная для ситуативного распространения (Ad Hoc distribution), должна включать в себя пиктограмму, которая будет появляться в магазине iTunes, но мой опыт подсказывает, что это не обязательно.

Подробнее...

Последние приготовления приложения

Поскольку приближается знаменательный день, когда вы планируете представить свое приложение в интернет-магазин Арр Store, не давайте соблазну большой славы и огромной прибыли сбить вас с правильного пути и не пропускайте чрезвычайно важные этапы заключительной подготовки приложения.

Подробнее...

Пиктограммы в приложении

Файл пиктограммы должен иметь формат PNG без показателя прозрачности альфа. Пиктограмма должна быть квадратной; округление углов будет выполнено автоматически.

Подробнее...

Другие пиктограммы

Когда вы будете представлять свое приложение в интернет-магазин Арр Store, вас попросят предъявить пиктограмму размером 1024x1024 в формате PNG, JPEG или TIFF, чтобы изобразить ее на веб-сайте магазина.

Подробнее...

Заставки

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

Подробнее...

Снимки экрана

Когда вы представите свое приложение в интернет-магазин Арр Store, вас попросят прислать один или несколько снимков экрана вашего приложения для того, чтобы выставить их в магазине. Эти снимки экрана следует сделать заранее.

Подробнее...

Параметры в списке свойств

В файле Info.plist есть много настроек, играющих важную роль для правильного поведения вашего приложения.

Подробнее...

Представление приложения в интернет-магазин Арр Store

Перед тем как представить ваше приложение в интернет-магазин Арр Store, целесообразно сделать его архив, как было описано ранее, и в последний раз проверить как сборку Ad Нос.

Подробнее...

Cocoa

Для программирования в операционной системе iOS можно использовать совокупность каркасов, предоставляемых компанией Apple.

Подробнее...

Наследование

В среде Cocoa, по существу, предоставляется большое разнообразие объектов с заранее известным поведением, определенным требуемым образом. 

Подробнее...

Категории

Категория — это языковое средство Objective-C, позволяющее перейти непосредственно к существующему классу и внедрить в него дополнительные методы.

Подробнее...

Разделение класса

С помощью категории можно разделить класс на несколько пар файлов с расширением .h и .m.

Подробнее...

Расширения классов

Расширение класса — это безымянная категория, отдельно существующая как раздел интерфейса

Подробнее...

Протоколы

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

Подробнее...

Неформальные протоколы

В Интернете или в документации можно периодически встретить обозначение неформальный протокол.

Подробнее...

Необязательные методы

В протоколе можно явным образом обозначить некоторые или все методы как необязательные.

Подробнее...

Некоторые классы из каркаса Foundation среды Cocoa

Классы из каркаса Foundation среды Cocoa предоставляют основные типы данных и служебные средства, образующие основание для большей части того, что приходится делать в среде Cocoa.

Подробнее...

Полезные структуры и константы

Структура NSRange играет очень важную роль в обращении с некоторыми рассматриваемыми здесь классами.

Подробнее...

Класс NSString со товарищи

Класс NSString уже не раз довольно свободно использовался в примерах, приведенных ранее в этом разделе. Он является объектным вариантом представления символьной строки в среде Cocoa.

Подробнее...

Класс NSDate со товарищи

Класс NSDate автоматически представляет дату и время в виде количества секунд (типа NSTimelnterval), отсчитываемых относительно некоторой исходной даты.

Подробнее...

Класс NSNuxnber

Объект класса NSNumber заключает в себе числовое значение, в том числе и логическое значение BOOL.

Подробнее...

Класс NSValue

Класс NSValue является суперклассом для класса NSNumber.

Подробнее...

Класс NSData

Класс NSData представляет общую последовательность байтов и служит, по существу, в качестве буфера, занимающего часть оперативной памяти.

Подробнее...

Равенство и сравнение

Упомянутые выше типы могут сразу показаться основными типами данных, но на самом деле они являются типами объектов, а это означает, что они являются указателями (см. главу 3).

Подробнее...

Класс NSIndexSet

Класс NSIndexSet представляет набор однозначных целых чисел и служит для обозначения номеров элементов упорядоченной коллекции вроде массива типа NSArray.

Подробнее...

Классы NSArray и NSMutableArray

Класс NSArray представляет упорядоченную коллекцию объектов. Свойство count определяет длину этой коллекции, а конкретный объект может быть извлечен из нее по номеру индекса с помощью метода obj ectAtlndex:. Индекс первого объекта в данной коллекции равен нулю, и поэтому индекс последнего ее элемента равен count - 1.

Подробнее...

Класс NSSet со товарищи

Класс NSSet представляет неупорядоченную коллекцию раздельных объектов. Слово “раздельный” здесь означает, что в коллекции не должно быть двух одинаковых объектов, при сравнении которых с помощью метода isEqual: последний возвращает логическое значение YES.

Подробнее...

Классы NSDictionary и NSMutableDictionary

Класс NSDictionary представляет неупорядоченную коллекцию пар “ключ-значение”, которые в некоторых языках программирования называются просто хешем. Ключ обычно, хотя и не обязательно, является объектом типа NSString.

Подробнее...

Класс NSNull

Класс NSNull ничего не делает, а только предоставляет указатель на одиночный объект [NSNull null].

Подробнее...

Изменяемые и неизменяемые классы

Начинающие программировать под iOS испытывают определенные трудности, применяя пары изменяемых и неизменяемых классов из каркаса Foundation, поэтому здесь уместно дать некоторые рекомендации по этому поводу.

Подробнее...

Списки свойств

Список свойств — это строковое (в формате XML) представление данных.

Подробнее...

Скрытые особенности класса NSOb ject

Каждый класс наследует от класса NSOb j ect, и поэтому здесь имеет смысл уделить немного места его исследованию, чтобы стало понятнее, как им пользоваться. Класс NSOb ject имеет довольно сложное строение. Ниже перечисляются некоторые особенности его поведения.

Подробнее...

События в среде Cocoa

Ни один прикладной код не выполняется до тех пор, пока он не будет вызван из среды Cocoa.

Подробнее...

Причины для получения событий

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

Подробнее...

События в среде Cocoa - Наследование

Во встроенном классе Cocoa можно определить методы, которые эта среда будет вызывать сама и которые желательно (или обязательно) заместить в подклассе. Это обусловливает специальное, а не только стандартное поведение прикладного кода.

Подробнее...

Уведомления

Для приложения в среде Cocoa предоставляется единственный экземпляр класса NSNotif icationCenter, неофициально называемый центром уведомлений и доступный в виде [NSNotificationCenter defaultCenter].

Подробнее...

Получение уведомлений

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

Подробнее...

Снятие с регистрации

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

Подробнее...

Рассылка уведомлений

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

Подробнее...

Класс NSTixner

Строго говоря, таймер не является уведомлением, но ведет себя похожим образом. Это объект класса NSTimer, выдающий сигнал (срабатывания) по истечении заданного промежутка времени.

Подробнее...

Делегирование

Делегирование — это объектно-ориентированный шаблон проектирования, определяющий отношение между двумя объектами, где поведение первого объекта специально настраивается или поддерживается вторым объектом.

Подробнее...

Делегирование в среде Cocoa

Для того чтобы специально настроить поведение экземпляра класса Cocoa посредством делегирования, следует выбрать в прикладном коде класс, в котором при необходимости объявляется соответствие протоколу, подходящему для делегирования.

Подробнее...

Реализация делегирования

Шаблон делегата в среде Cocoa, обязанности которого описываются в протоколе, можно вполне сымитировать в прикладном коде.

Подробнее...

Источники данных

Источник данных подобен делегату, за исключением того, что его методы предоставляют данные для отображения другого объекта.

Подробнее...

Действия

Действие — это сообщение, посылаемое экземпляром подкласса, производного от класса UlControl.

Подробнее...

Цепочка реагирующих элементов

Реагирующий элемент — это объект, которому известно, как получать непосредственно объекты типа UIEvent, упоминавшиеся в предыдущем разделе.

Подробнее...

Перекладывание ответственности

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

Подробнее...

Действия без цели

Действие без цели — это пара "цель-действие", в которой цель оказывается пустой (nil). Это означает, что целевой объект для такого действия заранее не назначен.

Подробнее...

Сильная зависимость от событий

Прикладной код выполняется только потому, что среда Cocoa посылает ему событие и в нем установлен метод, готовый принять событие.

Подробнее...

Отложенное выполнение

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

Подробнее...

Методы доступа

В этой главе мы снова рассмотрим три основных аспекта Objective-C, представленных вкратце в главе 5: методы доступа, механизм доступа к значениям по ключам и свойства. Но на этот раз мы обсудим их углубленно и досконально. Это будет сделано с учетом их особой роли в одном из самых важных и ключевых аспектов среды Cocoa: управлении памятью для хранения экземпляров классов языка Objective-C.

Подробнее...

Доступ к значениям по ключам

В среде Cocoa имя метода доступа получается из символьной строки во время выполнения с помощью механизма, называемого доступом к значениям по ключам, или сокращенно KVC, где ключ — это символьная строка типа NSString с именем значения, к которому осуществляется доступ.

Подробнее...

Механизм KVC и выходы

Механизм доступа к значениям по ключам положен в основу принципа действия связей с выходами. Имя выхода представлено символьной строкой в nib-файле. Механизм доступа к значениям по ключам превращает символьную строку в критерий поиска подходящих методов доступа.

Подробнее...

Пути к ключам

Путь к ключу позволяет выстраивать ключи цепочкой в одном выражении.

Подробнее...

Методы доступа к массиву

Механизм доступа к значениям по ключам позволяет реализовать в объекте ключ таким образом, как будто его значением является массив (или множество), даже если это на самом деле не так.

Подробнее...

Управление памятью

Многих начинающих программировать в среде Cocoa удивляет, что объектам Cocoa требуется управление памятью и что ошибки в управлении памятью могут привести к стремительному увеличению чрезмерно расходуемой оперативной памяти, аварийным сбоям и загадочно неверному поведению приложения.

Подробнее...

Принципы управления памятью в среде Cocoa

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

Подробнее...

Правила ручного управления памятью в среде Cocoa

Поведение объекта оказывается корректным по отношению к управлению памятью при условии, что он соблюдает определенные очень простые правила соответствия основным принципам управления памятью, изложенным в общих чертах в предыдущем разделе.

Прежде чем рассматривать эти правила, следует напомнить, что имя переменной, в том числе и экземпляра, представляет собой обычный указатель, что нередко смущает начинающих программировать в операционной системе iOS. Имя переменной, указывающее на объект, зачастую трактуется как объект, хотя оно таковым не является. Эти два понятия легко спутать, поэтому старайтесь не попасть в эту западню, неверно трактуя их. Когда сообщение посылается указателю, оно на самом деле посылается через этот указатель объекту, на который он указывает. Правила управления памятью относятся к объектам, а не к именам, ссылкам или указателям. Подсчет сохраняемых ссылок на указатель нельзя увеличить или уменьшить, поскольку такого объекта не существует. Память, занимаемая указателем, управляется автоматически и имеет крошеный объем. Управление памятью имеет отношение к объекту, на который ссылается указатель. Именно поэтому в примерах, рассматриваемых на страницах этой книги, объекты называются Manny, Мое, Jack или А и В, а не по именам переменных. Вопрос сохранения объекта Jack не имеет никакого отношения к имени, по которому любой другой объект обращается к объекту Jack.

Теперь вернемся к главному предмету этого раздела. Ниже приведены правила ручного управления памятью в среде Cocoa.

  • Для того чтобы увеличить подсчет сохраняемых ссылок на любой объект, достаточно послать ему сообщение retain. Эта операция называется сохранением объекта. Она гарантирует, что объект сохранится, по крайней мере, до тех пор, пока подсчет сохраняемых ссылок на него не уменьшится снова. Для большего удобства вызываемый метод retain возвращает в качестве своего значения сохраненный объект. Это означает, что в результате вызова [myObject retain] возвращается объект, на который указывает имя myOb j ect, но при этом подсчет сохраняемых ссылок этого объекта увеличивается.
  • Когда классу дается команда alloc (или new), начинает свое существование получающийся в итоге экземпляр этого класса, причем подсчет сохраняемых ссылок на него уже увеличен. Поэтому не нужно (да и не следует) сохранять объект, экземпляр которого только что получен по команде alloc или new. Аналогично, когда экземпляру дается команда сору, получающийся в итоге новый объект (т.е. копия) начинает свое существование, причем подсчет сохраняемых ссылок на него уже увеличен. Следовательно, не нужно (да и не следует) сохранять объект, экземпляр которого только что получен по команде сору.
  • Для того чтобы уменьшить подсчет сохраняемых ссылок на любой объект, достаточно отправить ему сообщение release. Эта операция называется освобождением объекта.
  • Если объект А получил объект В по команде alloc (либо new) или сору или же если объект А дал команду retain объекту В, то в конечном итоге объект А должен уравновесить эту операцию, выдав один раз команду release объекту В. После этого объект В должен принять во внимание, что объект В уже не существует. Это золотое правило управления памятью, позволяющее согласованно и правильно управлять ею.

Для того чтобы лучше понять золотое правило ручного управления памятью в среде Cocoa, следует мыслить категориями владения. Так, если объект Manny дал команду alloc, retain или сору объекту Jack, он тем самым подтвердил право на владение этим объектом. Одновременно объектом Jack могут владеть несколько объектов, но каждый такой объект отвечает только за правильное управление собственным владением объектом Jack. Объект, владеющий объектом Jack, отвечает в конечном счете за освобождение этого объекта, тогда как объект, не владеющий им, вообще не должен освобождать его. До тех пор, пока объекты, владеющие объектом Jack, ведут себя подобным образом, утечки памяти или висячие указатели на этот объект не возникнут.

Если действует механизм ARC, рассматриваемый в следующем разделе, эти правила остаются в силе, но они соблюдаются компилятором автоматически. В приложении на основе механизма ARC вообще не нужно, а на самом деле даже запрещено, давать команду retain или release вручную. Эти команды компилятор выдает автоматически, придерживаясь тех же самых принципов ручного управления памятью. Поскольку компилятор точнее и намного надежнее соблюдает правила управления памятью, чем вы как программист, то он вряд ли совершит ошибки, которые вы могли бы допустить по небрежности или недоразумению.

В тот момент, когда объект освобождается из памяти, появляется возможность уничтожить его. До появления механизма ARC это обстоятельство вызывало немалое беспокойство у программистов. В прикладной программе, не опирающейся на механизм ARC, приходится следить за тем, чтобы любые сообщения не посылались последовательно по любому указателю на объект, который уничтожен, включая и указатель, использованный для освобождения объекта. В противном случае такой указатель может стать висячим! Если существует какая-нибудь опасность попытаться случайно воспользоваться этим висячим указателем, то рекомендуется сделать его пустым, чтобы он указывал на пустое значение (nil). Сообщение, отправляемое по пустому указателю, не возымеет никакого действия. Оно не принесет никакой пользы, но и не нанесет большого вреда, как куриный бульон.

Данная стратегия строго соблюдается в прикладной программе, опирающейся на механизм ARC. В частности, механизм ARC делает пустым любой указатель на объект, которому было послано последнее уравновешивающее сообщение release, уведомляющее о том, что он может теперь прекратить свое существование. Как упоминалось в главе 3, механизм ARC делает также пустым указатель на экземпляр, когда он объявляется, если только не инициализировать его вручную, чтобы он указывал на конкретный экземпляр. Из этого неизбежно следует такой замечательный вывод: если действует механизм ARC, то всякий указатель на экземпляр указывает на конкретный экземпляр или на пустое значение. Но, к сожалению, это не избавляет полностью от появления висячих указателей, поскольку в самой среде Cocoa механизм ARC не применяется, как поясняется в следующем разделе.

 

Отладка ошибок управления памятью

Ошибки управления памятью относятся к числу наиболее распространенных ловушек, в которые попадают не только начинающие, но и опытные программирующие в среде Cocoa. Хотя такие ошибки совершаются намного реже, если действует механизм ARC, они все же вполне возможны, особенно потому, что программисты, пользующиеся механизмом ARC, склонны неверно думать, что они застрахованы от подобных ошибок. Практический опыт учит пользоваться всеми доступными средствами в поисках возможных ошибок. Ниже перечислены некоторые из этих средств (см. также главу 9).

  • Измеритель памяти в навигаторе отладки (Debug) предоставляет диаграмму использования памяти при выполнении приложения, позволяя следить за возможными утечками памяти или другим неоправданно чрезмерным ее использованием.
  • Статический анализатор, вызываемый по команде Product ^Analyze, предоставляет немало полезных сведений об управлении памятью и может помочь привлечь ваше внимание к потенциальным ошибкам управления памятью.
  • На панели Instruments (Инструменты), доступной по команде Product^Profile, имеются отличные средства для выявления утечек памяти и слежения за управлением памятью, выделяемой для отдельных объектов.
  • Проверенная временем простейшая самодиагностика помогает убедиться в том, что объекты ведут себя должным образом. В частности, реализуйте метод dealloc с вызовом функции NSLog (). Если она не вызывается, значит, объект не собирается прекращать свое существование. Такой прием позволяет выявить ошибки, которые не способен обнаружить ни статический анализатор, ни инструментальные средства на панели Instruments.
  • Особенно трудно выявить висячие указатели, но их зачастую можно обнаружить, активизировав объекты-зомби. Это нетрудно сделать на панели Instruments с помощью шаблона Zombies. С другой стороны, можно отредактировать действие Run в своей схеме, перейти на вкладку Diagnostics и установить флажок Enable Zombie Objects. В итоге ни один из объектов не прекратит свое существование, но вместо этого будет заменен объектом-зомби, выводящим на консоль уведомление вроде "Сообщение послано освобожденному из памяти экземпляру", если отправить ему сообщение. Не забудьте дезактивизировать объекты-зомби по завершении отслеживания висячих указателей. Не пользуйтесь объектами-зомби вместе с инструментом Leaks, поскольку эти объекты сами являются утечками.

Но даже помощи всех перечисленных выше инструментальных средств может оказаться недостаточно в разрешении всех затруднений, связанных с управлением памятью. Например, такие объекты, как представление типа UlView, содержащее крупное изображение, сами по себе невелики, а следовательно, в измерителе памяти или на панели Instruments может быть и не зарегистрировано чрезмерное использование памяти. Тем не менее они требуют значительного объема дополнительной памяти. Необходимость поддерживать ссылки на слишком большое количество подобных объектов может в конечном итоге привести к тому, что приложение будет просто уничтожено системой. Отслеживать подобные ошибки непросто.

Назначение и функции механизма ARC

При создании нового проекта и выборе шаблона приложения в среде Xcode 5 для этого проекта по умолчанию применяется механизм ARC. Это, среди прочего, означает следующее.

Подробнее...

Управление памятью для объектов Cocoa

Встроенные объекты Cocoa принимают владение передаваемых им объектов, сохраняя их, если считают это целесообразным.

Подробнее...

Автоматическое освобождение из памяти

Каким же образом происходит управление памятью при вызове метода и получении в качестве результата экземпляра, названного готовым в главе 5? Рассмотрим, например, следующий фрагмент кода:

Подробнее...

Управление памятью для переменных экземпляра (без механизма ARC)

До появления механизма ARC основное место, где программисты могли совершить ошибку при управлении памятью, было связано с переменными экземпляра.

Подробнее...

Управление памятью для переменных экземпляра (с помощью механизма ARC)

Если применяется механизм ARC, то он будет автоматически управлять памятью, выделяемой для переменной экземпляра.

Подробнее...

Циклы сохранения и слабые ссылки

Механизм ARC действует автоматически и бездумно. Ему ничего не известно о логике отношений между объектами в приложении.

Подробнее...

Необычные случаи управления памятью

Класс NSNotif icationCenter предоставляет ряд любопытных средств для управления памятью. Вам полезно будет знать о них, поскольку вы, скорее всего, будете пользоваться уведомлениями в своем прикладном коде.

Подробнее...

Загрузка nib-файлов и управление памятью

При загрузке nib-файла в системе iOS nib-объекты верхнего уровня, экземпляры которых при этом получаются, становятся автоматически освобождаемыми. Если не сохранить их так или иначе, то они вскоре исчезнут как дым. Предотвратить это можно двумя основными способами.

Подробнее...

Управление памятью для глобальных переменных

В языке С, а следовательно, и в Objective-C, переменную разрешается объявлять за пределами любого метода. В книге K&R (см. лаву 1) такая переменная называется внешней (см. K&R, раздел 4.3), а я называю ее глобальной переменной.

Подробнее...

Управление памятью для ссылок типа CFTypeRef

Ссылка типа CFTypeRef является указателем на структуру, а имя ее типа обычно оканчивается на Ref (см. главу 3). Она обычно получается с помощью функции языка С, где предусмотрены функции для обращения с ней.

Подробнее...

Управление памятью для данных контекста пустых указателей

Некоторые методы из классов Cocoa принимают необязательный параметр, обозначаемый как void* и нередко называемый contextНа первый взгляд, параметр void*, обозначающий тип универсального указателя, подобен параметру id, обозначающему универсальный тип объекта, поскольку ссылка на объект является указателем.

Подробнее...

Свойства управления памятью

Свойство (property) — это удобное синтаксическое средство для вызова метода доступа с помощью записи через точку (см. главу 5). В приведенных ниже строках кода представлены равнозначные способы вызова метода для установки значения свойства.

Подробнее...

Стратегии управления памятью для свойств

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

Подробнее...

Синтаксис объявления свойств

Свойства могут быть объявлены везде, где объявляются методы, например, в разделе интерфейса заголовочного файла с расширением ,h, в расширении класса или объявлении протокола. Ниже схематически показан синтаксис объявления свойства.

Подробнее...

Синтез методов доступа к свойствам

Для запроса на автоматический синтез методов доступа служит директива ^synthesize. Она указывается в любом месте раздела реализации класса сколько угодно раз и принимает разделяемый запятыми список имен свойств.

Подробнее...

Динамические методы доступа

Вместо написания собственных методов доступа, включения в прикладной код директивы ©synthesize или применения автоматического синтеза можно снабдить объявление свойства директивой ©dynamic (в разделе реализации).

Подробнее...

Связь между объектами

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

Подробнее...

Видимость, достигаемая получением экземпляра

Каждый экземпляр получается откуда-то и по чьему-то требованию. В частности, один объект посылает сообщение другому объекту с требованием получить, прежде всего, такой экземпляр.

Подробнее...

Видимость, достигаемая отношением

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

Подробнее...