Решение

Решение

Вот краткое обобщение того, что необходимо знать о переменных в блоковых объектах.

Локальные переменные в блоковых объектах работают точно так же, как и в методах Objective-C.

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

• Нельзя ссылаться на self в независимых блоковых объектах, реализованных в классе Objective-C. Если необходим доступ к self, то вам нужно передать его объект блоковому объекту в качестве параметра. Чуть позже рассмотрим на примере и такую ситуацию.

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

• При работе со встраиваемыми блоковыми объектами локальные переменные, определяемые внутри реализации блокового объекта, доступны для считывания, но не для записи. Однако есть и исключение. Блоковый объект может записывать информацию в такие переменные, если они определены с типом хранения __block. Пример мы также рассмотрим.

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

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

Данный текст является ознакомительным фрагментом.



Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Решение

Из книги автора

Решение Воспользуйтесь методом dataWithJSONObject: options: error: класса


Решение

Из книги автора

Решение Воспользуйтесь методом JSONObjectWithData: options: error: класса


Решение

Из книги автора

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


Решение

Из книги автора

Решение Воспользуйтесь классом NSXMLParser.


Решение

Из книги автора

Решение Используйте метод экземпляра URLsForDirectory: inDomains:, относящийся к классу


Решение

Из книги автора

Решение Все классы Cocoa, обеспечивающие сохранение информации, например NSString, UIImage и NSData, предоставляют методы экземпляра, позволяющие сохранять данные на диске по заданному


Решение

Из книги автора

Решение Пользуйтесь методом экземпляра createDirectoryAtPath: withIntermediateDirectories: attributes: error:, относящимся к классу NSFileManager, как показано далее:— (BOOL) application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions{NSFileManager *fileManager = [[NSFileManager alloc] init];NSString *tempDir = NSTemporaryDirectory();NSString *imagesDir = [tempDir


Решение

Из книги автора

Решение Используйте метод экземпляра contentsOfDirectoryAtPath: error:, относящийся к классу NSFileManager, как показано далее. В данном примере мы перечисляем все файлы, каталоги и символьные ссылки, расположенные в каталоге пакета с


Решение

Из книги автора

Решение Используйте один из двух методов экземпляра, removeItemAtPath: error: или removeItemAtURL: error:, относящихся к классу NSFileManager. Первый метод принимает путь как строку, а второй — как


Решение

Из книги автора

Решение Убедитесь, что ваш класс соответствует протоколу NSCoding, и реализуйте все необходимые методы данного протокола. Не волнуйтесь, я все подробно объясню в подразделе «Обсуждение» данного


Решение

Из книги автора

Решение Применяйте метод класса isSourceTypeAvailable:, относящийся к классу UIImagePickerController, со значением UIImagePickerControllerSourceTypeCamera следующим образом:— (BOOL) isCameraAvailable{return [UIImagePickerController


Решение

Из книги автора

Решение Инстанцируйте объект типа UIImagePickerController и представьте его пользователю как модальный вид в актуальном контроллере вида. Вот объявление этого контроллера


Решение

Из книги автора

Решение Воспользуйтесь объектом UIImagePickerController с источником типа UIImagePickerControllerSourceTypeCamera и медийной информацией типа kUTTypeMovie:— (void)viewDidAppear:(BOOL)animated{[super viewDidAppear: animated];static BOOL beenHereBefore = NO;if (beenHereBefore){/* Отображаем элемент для выбора даты только после того, как вызываетсяметод


Решение

Из книги автора

Решение Воспользуйтесь процедурой UIImageWriteToSavedPhotosAlbum:— (void) imageWasSavedSuccessfully:(UIImage *)paramImagedidFinishSavingWithError:(NSError *)paramErrorcontextInfo:(void *)paramContextInfo{if (paramError == nil){NSLog(@"Image was saved successfully.");} else {NSLog(@"An error happened while saving the


Решение

Из книги автора

Решение Следует обеспечить обработку ошибок соединения в блоковых объектах, передаваемых вашим объектам


Решение

Из книги автора

Решение Добавьте в главный файл. plist приложения ключ UIApplicationExitsOnSuspend и задайте ему значение true:<# Некоторые ключи и значения #><key>UIApplicationExitsOnSuspend</key><true/><# Остальные ключи и