“在Objective-C中,'sizeof'在非脆弱ABI中与'Fraction'接口的应用无效”

时间:2011-08-28 05:58:49

标签: objective-c sizeof

我正在研究Steven Kochan的“Objective-C 2.0编程”。我们用两个int实例变量创建了一个Fraction对象。在本书的后面,Kochan在Fraction对象的指针myFract上使用了sizeof语句:

sizeof(*myFract)

当我这样做时,收到编译错误:

  

将'sizeof'应用于非脆弱ABI中的'Fraction'接口

http://clang.llvm.org/compatibility.html#sizeof-interface表示对于大小可以更改的对象可能会发生此错误,但Fraction实例仅包含两个int实例变量(加上书中提到的“继承的isa成员”)。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

由于您正在使用现代ABI,因此对象的大小仍然可能会发生变化。在旧版本的Objective-C中,对象基本上是结构体,这意味着可以对它们进行sizeof()。现在情况已经不再如此,从一开始就不是一个特别好的主意。我不确定Kochan试图用它来教什么,但是我认为没有必要对Objective-C进行编程。您应该能够通过在Mac上构建为32位来获得旧行为,但同样,这不是您想要在实际程序中执行的操作。

答案 1 :(得分:3)

要跟进Chuck所说的内容,如果你真的需要知道一个对象的大小,你应该在运行时使用class_getInstanceSize()