My NSAssert failures indicate something went horribly wrong and proceeding further would result in undefined behaviour and data corruption. I can't imagine why people parrot disabling them in release builds.
If you can recover from it, you should be using an NSError instead.