objc ++中的c ++异常(std :: bad_alloc)句柄

时间:2014-10-11 05:33:22

标签: c++ objective-c exception

作为标题,在c ++中抛出异常:

class TestCpp
{
public:
    TestCpp (){
        NSLog(@"TestCpp init.");
        throw "simple exception."; // or throw std::bad_alloc();
    }
    ~TestCpp(){
        NSLog(@"TestCpp fini.");
    }
};

并且像这样抓住它:

@try{
    TestCpp o;
}
@catch(NSException* ex) {
    NSLog(@"exception: %@", ex.reason);
}
@catch(...){
    NSLog(@"unknown exception.");
}

但那不行。 而且,在objc ++中,如果无法处理C ++抛出的异常,我们如何处理C ++实例构造异常,比如std :: bad_alloc?

2 个答案:

答案 0 :(得分:0)

大多数Objective-C库(尤其是UIKit)不支持异常,Apple强烈建议不要使用它们。捕获Objective-C代码中的异常可能会导致各种错误。

如果要在Objective-C类中使用C ++代码,则必须通过命名文件.mm而不是.m来使用Objective-C ++

答案 1 :(得分:0)

时间调查,我得到一些代码:

Type* obj_ptr = new (std::nothrow) Type;
if(obj_ptr==nullptr) {
    @throw NSMallocException;
}
......

所以一切都好。因为NSMallocException已初始化为进程启动。 其他一些资源获取失败可以处理如下:

Resource* resource_handle = acquire(Resource);
if(resource_handle==nullptr) {
    @throw NSXxxGenericException;
}
......

或者您可以根据自定义需要初始化一些特殊的NSXxxException。