接口类型不能静态分配?

时间:2011-12-10 22:16:05

标签: objective-c xcode interface compiler-errors memory-management

我试着把它放在我的视图对象的头文件中:

@property (nonatomic) UIColor color;

存储应在此视图中绘制线条的颜色。

Xcode在这一行上给我一个错误:

  

无法静态分配接口类型

这是什么意思,我该怎么办?

编辑:

我确实添加了*,在合成时,它说:

ARC是否禁止使用未指定的所有权或存储属性合成Objective C对象的属性?

3 个答案:

答案 0 :(得分:73)

您的变量用于对象类型,因此必须声明为指针:

@property (nonatomic) UIColor * color;    // Note the asterisk

在这种情况下,“静态分配”意味着该对象的内存是在编译时分配的。但是,Obj-C中的所有对象都是在运行时分配的,并通过指针访问。

“接口类型”是一种过于技术性的术语,对编译器有意义,在这里并不是非常重要。这意味着UIColor代表接口,编译器希望您通过该接口与变量color进行交互。指向的对象的实际类型可能不同(如NSString之类的class cluster

答案 1 :(得分:6)

问题是你只能通过指针访问Objective-C对象,如下所示:

UIColor *color;

你不能有一个“裸”的对象,如下:

UIColor color;

所以解决方法是在你的代码中插入星号(你可能打算这样做,这个bug只是一个错字)。

答案 2 :(得分:5)

您需要声明一个UIColor指针,并根据您使用ARC还是MRR添加retain / strong:

@property (nonatomic, strong) UIColor *color;