Вандад Нахавандипур - iOS. Приемы программирования

Тут можно читать онлайн Вандад Нахавандипур - iOS. Приемы программирования - бесплатно ознакомительный отрывок. Жанр: comp-programming, издательство Питер, год 2014. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    iOS. Приемы программирования
  • Автор:
  • Жанр:
  • Издательство:
    Питер
  • Год:
    2014
  • Город:
    Санкт-Петербург
  • ISBN:
    978-5-496-01016-0
  • Рейтинг:
    3.9/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Вандад Нахавандипур - iOS. Приемы программирования краткое содержание

iOS. Приемы программирования - описание и краткое содержание, автор Вандад Нахавандипур, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.

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

iOS. Приемы программирования - читать онлайн бесплатно ознакомительный отрывок

iOS. Приемы программирования - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Вандад Нахавандипур
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

/* Убеждаемся, что изображение масштабировано правильно. */

[imageView setContentMode: UIViewContentModeScaleAspectFit];

/* Добавляем изображение к виду данного контроллера вида. */

[self.view addSubview: imageView];

} else {

NSLog(@"Image isn't downloaded. Nothing to display.");

}

});

});

}

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

Рис 72Загрузка изображения и демонстрация его пользователю применяется GCD - фото 151

Рис. 7.2.Загрузка изображения и демонстрация его пользователю, применяется GCD

Приведем другой пример. Допустим, у нас есть массив из 10 000 случайных чисел, которые сохранены в файле на диске. Мы хотим загрузить этот файл в память и отсортировать числа в порядке возрастания (то есть сделать так, чтобы список начинался с наименьшего числа). Потом мы хотим отобразить полученный список для пользователя. Инструмент управления, который будет применяться при этой операции, определяется тем, для какой системы вы пишете программу. В случае с iOS идеальным выходом было бы использовать экземпляр UITableView, а при работе с Mac OS X — экземпляр NSTableView. Поскольку массива у нас еще нет, начнем с его создания, потом загрузим этот массив, а потом отобразим.

Вот два метода, которые помогут нам найти место на диске устройства, где мы собираемся сохранить массив из 10 000 случайных чисел:

— (NSString *) fileLocation{

/* Получаем каталог (-и) документа. */

NSArray *folders =

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,

NSUserDomainMask,

YES);

/* Мы что-нибудь нашли? */

if ([folders count] == 0){

return nil;

}

/* Получаем первый каталог. */

NSString *documentsFolder = [folders objectAtIndex:0];

/* Прикрепляем имя файла к концу пути документа. */

return [documentsFolder

stringByAppendingPathComponent:@"list.txt"];

}

— (BOOL) hasFileAlreadyBeenCreated{

BOOL result = NO;

NSFileManager *fileManager = [[NSFileManager alloc] init];

if ([fileManager fileExistsAtPath: [self fileLocation]]){

result = YES;

}

return result;

}

А вот теперь очень важный нюанс. Мы хотим сохранить на диске массив из 10 000 случайных чисел, если, и только если мы не создавали такой массив на диске раньше. В противном случае мы сразу загрузим массив с диска. Если же прежде мы не создавали этот массив на диске, то сначала создадим его, а потом перейдем к загрузке массива с диска. В итоге, если считывание массива с диска пройдет успешно, мы отсортируем этот массив в порядке возрастания и, наконец, отобразим результаты для пользователя в графическом интерфейсе. Реализацию отображения результатов пользователю оставляю вам для самостоятельной работы.

— (void) viewDidAppear:(BOOL)paramAnimated{

[super viewDidAppear: paramAnimated];

dispatch_queue_t concurrentQueue =

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

/* Если мы еще не отсортировали массив из 10 000 случайных чисел

на диске ранее, сгенерируем эти числа сейчас, а потом сохраним

их на диск в массиве. */

dispatch_async(concurrentQueue, ^{

NSUInteger numberOfValuesRequired = 10000;

if ([self hasFileAlreadyBeenCreated] == NO){

dispatch_sync(concurrentQueue, ^{

NSMutableArray *arrayOfRandomNumbers =

[[NSMutableArray alloc] initWithCapacity: numberOfValuesRequired];

NSUInteger counter = 0;

for (counter = 0;

counter < numberOfValuesRequired;

counter++){

unsigned int randomNumber =

arc4random() % ((unsigned int)RAND_MAX + 1);

[arrayOfRandomNumbers addObject:

[NSNumber numberWithUnsignedInt: randomNumber]];

}

/* Теперь записываем массив на диск. */

[arrayOfRandomNumbers writeToFile: [self fileLocation]

atomically: YES];

});

}

__block NSMutableArray *randomNumbers = nil;

/* Считываем числа с диска и сортируем их в порядке возрастания. */

dispatch_sync(concurrentQueue, ^{

/* Если файл на данный момент уже создан, занимаемся его считыванием. */

if ([self hasFileAlreadyBeenCreated]){

randomNumbers = [[NSMutableArray alloc]

initWithContentsOfFile: [self fileLocation]];

/* Теперь сортируем числа. */

[randomNumbers sortUsingComparator:

^NSComparisonResult(id obj1, id obj2) {

NSNumber *number1 = (NSNumber *)obj1;

NSNumber *number2 = (NSNumber *)obj2;

return [number1 compare: number2];

}];

}

});

dispatch_async(dispatch_get_main_queue(), ^{

if ([randomNumbers count] > 0){

/* Обновляем пользовательский интерфейс, задействуя числа

из массива randomNumbers. */

}

});

});

}

Функционал GCD далеко не ограничивается синхронным или асинхронным выполнением блоков кода или функций. В разделе 7.9 вы научитесь группировать блоковые объекты и готовить их к выполнению в диспетчерской очереди. Кроме того, рекомендую вам изучить разделы 7.7. и 7.8, где говорится о прочих функциях, которые предоставляются программисту в GCD.

См. также

Разделы 7.4, 7.7 и 7.8.

7.7. Выполнение задач после задержки с помощью GCD

Постановка задачи

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

Решение

Воспользуйтесь функциями dispatch_after и dispatch_after_f.

Обсуждение

Работая с фреймворком Core Foundation, можно активизировать селектор в объекте по истечении заданного временного промежутка с помощью метода performSelector: withObject: afterDelay:, относящегося к классу NSObject. Например:

— (void) printString:(NSString *)paramString{

NSLog(@"%@", paramString);

}

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

[self performSelector:@selector(printString:)

withObject:@"Grand Central Dispatch"

afterDelay:3.0];

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

// Точка переопределения для настройки после запуска приложения

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

В данном примере мы приказываем среде времени исполнения вызвать метод printString: после трехсекундной задержки. Ту же операцию можно осуществить и в GCD с помощью функций dispatch_after и dispatch_after_f. Обе эти функции описаны далее.

• dispatch_after — направляет блоковый объект в диспетчерскую очередь по истечении заданного периода времени, указываемого в наносекундах. Эта функция требует следующих параметров:

задержка в наносекундах — количество наносекунд, в течение которых длится ожидание в определенной диспетчерской очереди в GCD (указываемой во втором параметре), после чего выполняется блоковый объект (задаваемый в третьем параметре);

диспетчерская очередь — диспетчерская очередь, в которой должен быть выполнен блоковый объект (указываемый в третьем параметре) после определенной задержки (задаваемой в первом параметре);

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Вандад Нахавандипур читать все книги автора по порядку

Вандад Нахавандипур - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




iOS. Приемы программирования отзывы


Отзывы читателей о книге iOS. Приемы программирования, автор: Вандад Нахавандипур. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x