Objective-C 2.0有一些新的增强功能:
for..in
我有兴趣使用Objective-C 2.0作为一种语言来编写跨多个操作系统平台的可移植代码 - 同时避免使用OpenStep或GNUStep等框架。
但是,虽然Windows上的gcc 3.4.5将解析在使用-fobjc-exceptions进行编译时使用@ try / @ catch / @ finally / @ throw异常处理的语法,但仍然会生成此错误:
error: storage size of '_stackExceptionData' isn't known
Mac OS X v10.3及更高版本以外的操作系统是否支持Objective-C 2.0功能?
答案 0 :(得分:2)
引自Cocotron gets some Objective-C 2.0 support via gcc 4.3.0:
约翰内斯最近的Cocotron补丁 也完全启用了@ try / @ catch 它存在于编译器中 但需要运行时支持。
www.cocotron.org关于Cocotron是什么:
Cocotron是一个开源项目 它实现了Objective-C API 类似于Apple所描述的 Inc.的Cocoa文档。这个 包括AppKit,Foundation, Objective-C运行时和支持API 比如CoreGraphics和 的CoreFoundation
因此,如果您对跨平台obj-c开发感兴趣,那么 Cocotron 可能会让您感兴趣...
答案 1 :(得分:1)
Apple使用标准GCC的变体/分支,其中内置了Objective-C 2.0支持。据我所知,标准GCC中没有Objective-C 2.0特性。
我不完全确定异常处理,但遗憾的是,您列出的其他功能在其他平台上不可用。
P.S。 GNUstep(和Cocoa)是OpenStep的一个实现,它是一个规范。
答案 2 :(得分:1)
有问题的功能需要编译器和运行时支持,因此,虽然可以构建支持语法的编译器(LLVM / Clang可以想到),但许多这些功能都会调用Objective-C运行时和据我所知(并快速仔细检查谷歌)GNU运行时没有必要的支持。
答案 3 :(得分:0)
作为Étoilé项目的一部分,有一个跨平台运行时,它支持Objective-C异常(以及@synchronized
作为结果)和AFAIK属性:
http://www.nabble.com/ANN:-New-Objective-C-Runtime-td13648692.html
顺便说一句,Objective-C语言异常不是Objective-C 2.0特性。自Panther以来,他们一直在NeXT运行时。
答案 4 :(得分:0)
@try/@catch/@finally/@throw
实际上早于Objective-C 2.0。它是在MacOSX 10.3中引入的,而Objective-C 2.0是在10.5(Leopard)中引入的。