似乎暗示每个人都知道“非脆弱ABI”是什么 - 考虑到Xcode中所涉及的频率和事实性质。例如......
下标需要接口节点的大小,在非脆弱的ABI中不是常量
或
选择要使用的Objective-C ABI版本。可用版本为1(传统的“脆弱”ABI),2(非脆弱ABI 1)和3(非脆弱ABI 2)。
那说...... 什么是非脆弱的ABI?(为什么它不被称为更抽象/更清楚解释的东西?)
答案 0 :(得分:0)
经过一番探讨之后,关于这个主题的最佳摘要/建议之一是以下内容......
非脆弱的ABI允许更改超类的ivars而不破坏已编译的子类(以及其他内容)。虽然它只支持Mac上的64位,但由于向后兼容性问题而无法在现有的32位架构上支持它。
It goes on to say, basically ..如果Xcode,通常被配置为仅为“仅限活动架构”构建,仅限64位...一个可能在切换到一个“发布”方案,通常设置为两个(63位/ 32位)架构,也就是“通用”......
你可能想在Mac上使用ARC,我很确定你必须放弃32位支持才能这样做。您可以在Xcode中为目标的构建设置更改目标体系结构。
根据我自己的经验,我相信非脆弱的ABI让我们受益的是缩写语法和模式,例如......
// source.h - readonly public properties.
@interface SuperClassy : NSObject
@property (readonly) NSArray *cantTouchThis;
@end
// source.m set readonly properties, internally.
@implementation SuperClassy
// look, no @synthesize… just use _ivarName.
-(void) touchIt:(NSArray*)a { _cantTouchThis = a; }
@end
int main(int argc, const char * argv[]) {
SuperClassy *it = [SuperClassy new];
// you cannot set it.cantTouchThis = @[anArray].
[it touchIt:@[@"cats"]];
// but you can via a method, etc.
NSLog(@"%@", it.cantTouchThis);
}
NSLOG ➜ ( cats )