有没有一种写Objective-C的方法,没有例外的风格?

有没有一种写Objective-C的方法,没有例外的风格?,objective-c,exception,Objective C,Exception,与传统C函数中指示错误的返回值不同,Objective-C中的许多函数或方法可能会触发异常。例如,[NSString alloc]将在内存不足时触发异常,而malloc将返回指示故障的空指针 有没有办法以这种无一例外的方式编写Objective-C代码?例如,当无法分配内存时,我是否可以使[NSString alloc]返回nil,而不是抛出异常?否。Objective-C假设在大多数情况下不会耗尽内存,如果内存耗尽,则没有合理的恢复方法,程序应该中止。如果您有一个可以预期并可恢复内存耗尽的平台

与传统C函数中指示错误的返回值不同,Objective-C中的许多函数或方法可能会触发异常。例如,
[NSString alloc]
将在内存不足时触发异常,而
malloc
将返回指示故障的空指针


有没有办法以这种无一例外的方式编写Objective-C代码?例如,当无法分配内存时,我是否可以使
[NSString alloc]
返回
nil
,而不是抛出异常?

否。Objective-C假设在大多数情况下不会耗尽内存,如果内存耗尽,则没有合理的恢复方法,程序应该中止。如果您有一个可以预期并可恢复内存耗尽的平台,那么您不应该使用ObjC

许多现代内核,包括Darwin,都支持过度提交内存,所以即使是malloc也不会给您错误。在嵌入式平台之外,我们通常假设“小”(小于1兆字节)分配总是成功的

对于其他断言失败的更一般的问题,没有。在ObjC中引发断言或抛出异常的事情被视为编程错误,并且没有办法从中恢复。可以捕获ObjC异常,但即使是这些异常也无法恢复。在完成碰撞之前,你只需要做一点工作。(ObjC++中的规则略有不同,但一般的答案是相同的。您无法避免所有类型的崩溃。)