Интернет магазин китайских планшетных компьютеров



Компьютеры - 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
         . . .
    }
}


Просмотров: 10622


<<< Mission Control
Photo Booth >>>