Az Objective-C programozási nyelv

Kivételkezelés

Kivételkezelés vezérlési szerkezete

Az Objective-C-ben a C++/Java szintaxisához nagyon hasonló szintaktikával rendelkezik a kivételek kezelését támogató vezérlési struktúra. Az egyetlen jelentősebb eltérés hogy nem kulcsszavakat hanem az Objective-C-re jellemző módon, direktívákat használunk. Természetesen lehetőség van több @catch blokk használatára, valamint a @finally blokk is elhagyható.

@try { // Some code that might throw exceptions } @catch (/* Exception declaration */) { // Reacting to exception } @finally { // Releasing used resources }

Kivételek definiálása és kiváltása

A kivételek dobásához először példányosítanunk kell egy olyan osztályt, ami a megfelelő információkat tartalmazza. Ez tipikusan NSException vagy annak egy leszármazott osztálya. Ezután a megszokott throw utasításnak megfelelő @throw direktívát használva lehet eldobni a kivételt :

NSException *exception = [NSException exceptionWithName:@"HotTeaException" reason:@"The tea is too hot" userInfo:nil]; @throw exception;

Egy catch blokkban a @throw; direktívával továbbdobhatjuk a kivételt. Nem csak a példában látott NSException példányokat lehet dobni, hanem bármilyen Objective-C objektumot, de az NSException tartalmaz olyan metódusokat, amelyek a feldolgozást és a kivételkezelést segítik, ezért ebből érdemes származtatni saját kivétel osztályunkat.

Kivételek kezelése

A try-blokkban dobott kivételt egy, vagy több egymás után írt catch-blokkban tudjuk kezelni. Az első blokkban érdemes a legspecifikusabb kivételeket kezelni, utána az általánosabb kivételeket, amiket esetleg tovább kéne dobni. A finally-blokkban lévő utasítások mindenképpen végrehajtódnak, kivétel kiváltódásától függetlenül.

@try { //... } @catch (CustomException *ce) { //... } @catch (NSException *ne) { //... @throw; } @catch (id ue) { //... } @finally { //... }

Kivételek terjedése

A kivételek - a már megszokott módon, - a kiváltás helyétől felfelé, elkapásig vagy terminálásig terjednek.