GNUstepObjective-CRutime被设计为GCCRutime 的替代品。它支持三种ABI:
旧的GCCABI,它提供对Objective-C1.0特性的支持。这可以通过Clag中的-fobjc-rutime=gcc标志或用GCC编译来选择。最初的GNUstep o-fragile ABI,旨在与GCCABI兼容,但提供对现代Objective-C功能的支持。这可以通过Clag中的-fobjc-rutime=gustep-1.9标志来选择。现代(v2)ABI,提供了更丰富的反射元数据、更小的二进制文件和更少的内存使用。这是在Clag7.0或更高版本中用-fobjc-rutime=gustep-2.0标志选择的。通过在CMake配置中将OLDABI_COMPAT标志设置为OFF,可以在不支持旧ABI的情况下构建运行时。这将产生一个较小的二进制文件,它不会链接到使用旧ABI的代码。所有ABI都支持GCC运行时之外的以下功能:现代Objective-C运行时API,最初是在OSX10.5中引入的。Blocks合成的属性访问器对@sychroized()的有效支持依赖于类型的调度,消除了不匹配的选择器造成的堆栈损坏支持MacOSX10.6引入的相关参考API。支持MacOSX10.7引入的自动引用计数API
评论