【问题标题】:Is there a way to write Objective-C with no-exception style?有没有办法编写具有无异常风格的 Objective-C?
【发布时间】:2023-03-17 14:40:01
【问题描述】:

与传统 C 函数中指示错误的返回值不同,Objective-C 中的许多函数或方法可能会触发异常。比如[NSString alloc]内存不足会触发异常,而malloc会返回一个空指针表示失败。

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

【问题讨论】:

    标签: objective-c exception


    【解决方案1】:

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

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

    https://serverfault.com/questions/852059/does-darwin-macos-kernel-do-memory-overcommit

    关于其他断言失败的更一般的问题,不。在 ObjC 中引发断言或抛出异常的事情被认为是编程错误,并且无法从它们中恢复。可以捕获 ObjC 异常,但即使是那些也无法恢复。您可以在完成崩溃之前做一些工作。 (在 ObjC++ 中规则略有不同,但大体答案是一样的。你无法避免各种崩溃。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      相关资源
      最近更新 更多