接口类型不能静态分配?

Wil*_*ham 40 xcode memory-management compiler-errors interface objective-c

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

@property (nonatomic) UIColor color;
Run Code Online (Sandbox Code Playgroud)

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

Xcode在这一行上给出了一个错误:

接口类型不能静态分配

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

编辑:

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

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

Jos*_*ell 77

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

@property (nonatomic) UIColor * color;    // Note the asterisk
Run Code Online (Sandbox Code Playgroud)

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

"接口类型"是一种对编译器有意义的过度技术术语,在这里并不是非常重要.它表示UIColor代表编译器期望您与变量交互的接口color.指向的对象的实际类型可能不同(如类集群一样NSString).

  • @William:因为`CGFloat`不是一个对象,而是一个原始对象. (3认同)

小智 6

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

UIColor *color;
Run Code Online (Sandbox Code Playgroud)

你不能有一个"裸"的对象,像这样:

UIColor color;
Run Code Online (Sandbox Code Playgroud)

因此,解决方案是在代码中插入星号(您可能打算这样做,而错误只是一个错字).


Ree*_*sen 5

您需要声明一个UIColor类似的指针并添加retain/strong,具体取决于您使用的是ARC还是MRR:

@property (nonatomic, strong) UIColor *color;
Run Code Online (Sandbox Code Playgroud)