On 14 Jun 2018, at 03:53, Quincey Morris <quinceymor...@rivergatesoftware.com> 
wrote:
> 
> On Jun 13, 2018, at 19:22 , Casey McDermott <supp...@turtlesoft.com> wrote:
>> 
>> Nearly always, the event loop is the best place to escape to.
> 
> This is not how current thinking goes, unless you mean something different 
> from what I think you’re saying.

Agreed, but with the proviso that the Cocoa framework actually catches and 
ignores exceptions itself in various contexts. This can be quite annoying when 
it happens, because it can result in odd behaviour and it isn’t always obvious 
that the cause was an exception.

> I may be out on my lonesome here, but if you want a robust app, I really 
> think you have exactly 2 error handling patterns:
> 
> 1. Returning false/nil with an outError parameter for recoverable errors, and 
> always testing the result at every level.
> 
> 2. Throwing NSExceptions for unrecoverable errors, and letting the app crash 
> immediately.

No, you aren’t out on your own.  That’s the tradition in the Objective-C world; 
either return a nil or NO result with an NSError parameter filled in 
appropriately, or throw an exception where a crash is probably appropriate.

There are a couple of places in the Cocoa frameworks where things don’t quite 
work that way; notably, Distributed Objects can throw exceptions when you send 
messages to remote objects — this makes sense, because the local proxy object 
is supposed to behave pretty much the same as the remote object, and could in 
general be of any type (therefore doesn’t necessarily have an NSError parameter 
available, or even a return code that could be used to indicate failure). If 
you’re using DO, you might therefore use Objective-C exceptions for some 
recoverable error handling (e.g. where a remote server has “gone away” and you 
therefore need to reconnect somehow or connect somewhere else).

> The situation with C++ exceptions is a bit different. You can basically do 
> whatever you want with those (including using them for flow control), but 
> there’s still nowhere central to catch uncaught exceptions, and you still 
> have to worry about multithreading.

More to the point, there’s nowhere safe to catch uncaught exceptions; you can’t 
assume that you can safely throw a C++ exception through any library or 
framework, including the Cocoa and Core Foundation frameworks, even though on 
the 64-bit runtime Objective-C and C++ exceptions are (kind of) unified, 
because Objective-C code generally doesn’t expect exceptions and so if you 
throw them through it it’s unlikely to be in a good state afterwards.

Basically, if you’re calling C++ code from your Objective-C code, and that C++ 
code might throw exceptions, you’re going to want to call it within a try 
statement (you *can* use an Objective-C @try, in which case the @catch(…) case 
will catch C++ exceptions; but that probably won’t give you the granularity you 
want).

Kind regards,

Alastair.

--
http://alastairs-place.net

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to