【问题标题】:Interface type cannot be statically allocated?接口类型不能静态分配?
【发布时间】:2012-01-17 14:55:42
【问题描述】:

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

@property (nonatomic) UIColor color;

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

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

接口类型不能静态分配

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

编辑:

我确实加了一个*,在合成的时候,它说:

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

【问题讨论】:

  • 编辑中的错误消息是一个完全不同的问题。请为此创建一个新问题。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 那为什么我可以静态声明 CGFloat 呢?
  • Objective-C 对象的大小在编译时是未知的,对吧?
  • @William Sham CGFloat 不是 Objective-C 对象。
  • @William:因为CGFloat 不是对象,而是原语。
  • @WTP:我不记得了。我认为通用对象 (struct objc_object?) 的大小是已知的。对于非易碎基类,我认为所有对象的大小都相同,并为 ivars 提供另一块内存。
【解决方案2】:

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

@property (nonatomic, strong) UIColor *color;

【讨论】:

    【解决方案3】:

    问题是你只能通过指针通过引用来访问Objective-C对象,像这样:

    UIColor *color;
    

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

    UIColor color;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-05
      • 2011-05-25
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      相关资源
      最近更新 更多