I don't think there is really a guarantee that you will return from the -run method. So you shouldn't rely on this to free the resources. There are other ways to do it. For example, a really low-level solution would be to implement an atexit handler
https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/atexit.3.html
and do the necessary freeing of the lock there.