Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Objective-C - Обработка исключений06 июля 2011Оглавление: 1. Objective-C 2. Синтаксис языка 3. Создание новых классов 4. Как работает механизм сообщений 5. Протоколы 6. Обработка исключений 7. Создание и уничтожение объектов 8. Управление памятью 9. Категории 10. Class objects и Objective-C runtime 11. Разное В языке Objective-C поддерживается обработка исключений, очень похожая на используемую в языках C++ и Java. Для этого служат директивы @try, @catch, @finally и @throw. Cup * cup = init]; @try { ; } @catch { NSLog ; } @catch { NSLog ; } @finally { ; } Для запуска исключения используется директива @throw, в качестве аргумента берущая указатель на объект-исключение. Обычно в Mac OS X/NextStep для этой цели используются объекты класса NSException. NSException * exc = [NSException exceptionWithName: @"my-exception" reason: @"unknown-error" userInfo: nil]; @throw exc; Внутри @catch-блоков директива @throw может использоваться без параметра для повторного запуска обрабатываемого исключения. СинхронизацияЯзык Objective-C поддерживает синхронизацию для многопоточных приложений. При помощи директивы @synchronized можно защитить фрагмент кода от одновременного выполнения сразу несколькими потоками. @synchronized берет на вход указатель на объект языка Objective-C, который играет роль мьютекса. При попытке потока начать выполнение защищенного фрагмента проверяется, выполняется ли уже этот фрагмент каким-либо потоком. Если да, то сравниваются объекты, переданные этими потоками в @synchronized. Если эти указатели совпадают, то поток, пытающийся войти в защищенный блок, будет приостановлен до тех пор, пока первый поток не выйдет из блока. Тогда выполнение второго потока продолжится, и уже он «запрет» этот блок для всех остальных потоков. Наличие подобной возможности заметно облегчает жизнь при написании многопоточных приложений, когда необходимо отслеживать попытки одновременного изменения одних и тех же данных сразу несколькими потоками. - criticalMethod { @synchronized { // perfrom modifications to shared objects . . . } } Просмотров: 11397
|