在基于Cocoa Touch的匿名类别中允许使用ivars但在“常规”Cocoa中不允许使用ivars吗?

时间:2012-04-04 23:58:41

标签: cocoa-touch cocoa objective-c-2.0

在iOS和常规OS X开发之间切换时,我注意到两件事:

//SomeClass.h
@interface SomeClass: SomeUIClass

    @property (retain)SomeProperty* someProperty;

@end

//SomeClass.m
@interface SomeClass ()
{
    SomePrivateVar* somePrivateVar;
}
@end

@implementation SomeClass

@synthesize someProperty;
@end

以上将在iOS下编译得很好。那就是:

  1. 我可以在不明确声明ivar的情况下合成属性 在公共场所@interface
  2. 我可以在.m文件下面进一步声明其他私有ivars 匿名类别(类扩展)。
  3. 但是,如果编译OS X并继承某些基于NS的类而不是基于UI的类(例如,NSView而不是UIView),则上述两种情况都会导致编译器错误。

    我想我认为Objective-C 2.一般允许上述内容,但它们只是iOS中的“快捷方式”?或者在iOS中允许使用它们的是什么,而不是在OS X中?

1 个答案:

答案 0 :(得分:2)

这些是"modern runtime"的功能,只能用于Mac OS X上的64位应用程序。您可能正在构建一个包含32位版本的通用二进制文件。