Чтение онлайн

на главную - закладки

Жанры

Программирование на Objective-C 2.0
Шрифт:

Напишите средство командной строки с именем myfind, которое принимает два аргумента. Первый из них указывает начальную папку для поиска, а вто-рой- имя файла, который нужно найти. Например, командная строка $ myfind /Users proposai.doc /Users/stevekochan/MyDocuments/proposals/proposal.doc $ начинает поиск в файловой системе с /Users, чтобы найти файл proposal.doc. Выведите полный путь к файлу, если он найден (в том виде, как показано выше), или соответствующее сообщение, если он не найден.

Напишите вашу собственную версию стандартных средств UNIX basename

и dirname.

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

Используя функцию NSTemporaryOirectory из NSPathUtilities.h и метод NSProcessInfo globallyUniqueString, описанные в этой главе, добавьте в NSString категорию с именем TempFiles и определите в ней метод с именем temporaryFileName, который возвращает при каждом вызове новое уникальное имя файла.

Внесите изменения в программу I6.7, чтобы в файле выполнялись чтение и запись kBufSize байт, причем kBufSize нужно определить в начале вашей программы. Обязательно проверьте эту профамму на больших файлах (размером больше kBufSize байт).

Откройте файл, считывайте его содержимое по 128 байт и выводите эти данные на терминал. Используйте метод FileHandle fileHandleWithSlandardOutput, чтобы получить описатель для вывода на терминал.

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

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

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

В этой главе мы обсудим стратегию выделения памяти в Foundation, пул ав-томатического высвобождения (autorelease pool) и идею «удержания» (retain) объектов. Вы узнаете также о счетчике ссылок (reference count) объекта и о сборке мусора (garbage collection), которая облегчает задачу удержания и последующего высвобождения объектов. Однако, как вы увидите, сборку мусора нельзя ис-пользовать для приложений iPhone, поэтому вы должны знать способы управления памятью, которые описываются в этой книге. 17.1. Автоматически высвобождаемый пул

Вы уже знакомы с автоматически высвобождаемым пулом (пулом автомати-ческого освобождения памяти) из примеров во второй части книги. При работе с программами Foundation вы должны создавать

этот пул для работы с объектами Foundation. Именно в этом пуле программа следит за объектами для их даль-нейшего высвобождения. Как уже говорилось, пул в приложении можно задать с помощью следующего вызова. NSAutoreleasePool * pool = [ [ N SAutor el ease Poo I alloc] init];

После создания этого пула Foundation автоматически добавляет н него оп-ределенные массивы, строки, словари и другие объекты. Закончив использование пула, можно освободить память, которую он использует, отправив сообщение drain. [pool drain];

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

Если программа создает много временных объектов (что часто происходит при выполнении кода в цикле), может потребоваться создание нескольких autorelease-пулов. Например, в следующем фрагменте кода показано, как со-здавать autorelease-пулы для высвобождения временных объектов, создаваемых на каждом шаге цикла for. NSAutoreleasePool *tempPool; for (i = 0; i < n; ++i) { tempPool = [[NSAutoReleasePool alloc] init]; ... // здесь выполняется много работы с временными объектами [tempPool drain]; }

Отметим, что при опустошении пула (pool drain)autorelease-nyji содержит не сами обьекты, а только ссылку на объекты. Чтобы добавить объект втекуши й autorelease- пул для последующего высвобождения, нужно отправить сообщение autorelease. [myFraction autorelease];

Система добавит myFraction в autorelease-пул для автоматического высвобож-дения. Как будет показано ниже, метод autorelease полезен, чтобы помечать объек-ты внутри метода для их устранения. 17.2. Подсчет ссылок

Описывая базовый класс объектов Objective-C NSObject, мы говорили, что память выделяется с помощью метода alloc, и ее можно в дальнейшем освободить с помощью сообщения release. К сожалению, это не всегда так просто. Выполняемое приложение может ссылаться на объект, который может быть создан в нескольких местах; объект может быть также сохранен в массиве или, например, к нему может быть обращение с помощью переменной экземпляра. Мы не можем освободить память, занимаемую объектом, пока не будем уверены, что все закончили использовать этот объект.

К счастью, Foundation framework включает удобное решение для отслежи-вания числа ссылок на объект. Это довольно простой способ, который называется подсчетом ссылок (reference count). Он состоит в следующем. При создании объекта его счетчик ссылок устанавливается равным 1. Каждый раз, когда нужно учесть объект, мы увеличиваем его счетчик ссылок на 1, отправляя сообщение retain, как в следующей строке. [myFraction retain];

Некоторые методы в Foundation framework тоже наращивают этот счетчик ссылок, например, когда объект добавляется в массив.

Поделиться:
Популярные книги

Вдоль по памяти. Бирюзовое небо детства

Единак Евгений Николаевич
Проза:
современная проза
5.00
рейтинг книги
Вдоль по памяти. Бирюзовое небо детства

Молот Пограничья. Гексалогия

Пылаев Валерий
Молот Пограничья
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.25
рейтинг книги
Молот Пограничья. Гексалогия

Эпоха Опустошителя. Том V

Павлов Вел
5. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том V

Отморозок 3

Поповский Андрей Владимирович
3. Отморозок
Фантастика:
попаданцы
5.50
рейтинг книги
Отморозок 3

Детская библиотека. Том 1

Крылов Иван Андреевич
1. Фольклор разных народов
Фольклор:
народные сказки
5.00
рейтинг книги
Детская библиотека. Том 1

Практический курс английского языка 2 курс

Аракин Владимир Дмитриевич
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Практический курс английского языка 2 курс

Тшай планета приключений.

Вэнс Джек Холбрук
Фантастика:
научная фантастика
5.00
рейтинг книги
Тшай планета приключений.

Поездка длиною в жизнь: Уроки, извлеченные из 15 лет работы в качестве генерального директора компании Walt Disney Company

Айгер Роберт
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Поездка длиною в жизнь: Уроки, извлеченные из 15 лет работы в качестве генерального директора компании Walt Disney Company

Замуж второй раз, или Ещё посмотрим, кто из нас попал!

Вудворт Франциска
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Замуж второй раз, или Ещё посмотрим, кто из нас попал!

Я до сих пор не царь. Книга XXVII

Дрейк Сириус
27. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор не царь. Книга XXVII

Апокалипсис

Мартин Джордж Р.Р.
Антология
Фантастика:
социально-философская фантастика
героическая фантастика
боевая фантастика
киберпанк
6.00
рейтинг книги
Апокалипсис

Кодекс Охотника. Книга XII

Винокуров Юрий
12. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XII

Легенда о Рэндидли Гостхаунде 1

Voytsekhovskiy Evgeniy
1. Легенда о Рэндидли Гостхаунде
Фантастика:
постапокалипсис
фэнтези
5.00
рейтинг книги
Легенда о Рэндидли Гостхаунде 1

Резонанс Ци. Том 7

Орлов Андрей Юрьевич
7. Резонанс Ци
Фантастика:
постапокалипсис
рпг
уся
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Резонанс Ци. Том 7