Objective-Cにも一応try-catch-finallyはあるんだけど、なんか他の言語と使われる文脈が違う気がしている。
Javaだと最初らへんに触れる例外処理は、ファイル入出力だと思う。
ファイルのコピーの場合、Javaだと、
try { srcChannel = new FileInputStream(srcPath).getChannel(); destChannel = new FileOutputStream(destPath).getChannel(); srcChannel.transferTo(0, srcChannel.size(), destChannel); } catch (IOException e) { e.printStackTrace(); } finally { if (srcChannel != null) { try { srcChannel.close(); } catch (IOException e) { } } if (destChannel != null) { try { destChannel.close(); } catch (IOException e) { } } }
引用:GDD Blog: [Java]ファイルを簡単にコピーする
Objective-Cの場合は
NSError *error; [fileManager copyItemAtURL:srcURL toURL:dstURL error:&error]; if(error){ // 何らかの原因で失敗したら、errorに発生したErrorが入る }
みたいな感じで、何かを実行したときに、異常が発生する可能性があるメソッドには引数にNSError **
を渡すようになっている場合が多い。
その割には、error:
にnilを渡しても、普通にコンパイル通るし、ネットに落ちてるコードを見てもnil渡したり、if(error)
しても何もせずにreturnしてる場合が多い。
NSFileManager *fileManager = [NSFileManager defaultManager]; [KKExceptionHandler tryWithTarget:fileManager selector:@selector(removeItemAtPath:error:) catch:^(NSError *error) { // execute this block if `-removeItemAtPath:error:` occurs an error. } ];
みたいに例外処理出来るようなのがあったら便利なんじゃないかなぁと思ったんだけど、実現可能なのか&既にあったりしないのか、みたいなのが気になった。
作れないかなーと思って、repository作って、Interfaceだけ書いて止まってる。