有时我的界面最终会有很多的标志变量,例如isThatFeatureEnabled
。或者,更糟糕的是,我将有一个包含仅标志和实例信息的界面。
在读取一些UIKit头文件时,我发现有些类声明了一个struct
,其中包含了所需的所有内部标志。例如UIView
有:
struct {
unsigned int userInteractionDisabled:1;
unsigned int implementsDrawRect:1;
unsigned int implementsDidScroll:1;
unsigned int implementsMouseTracking:1;
unsigned int hasBackgroundColor:1;
unsigned int isOpaque:1;
// ...
} _viewFlags;
这是如何工作的以及如何使用?
另外,(抱歉,如果这看起来似乎无关),请以StoreKit的SKProduct
为例。它没有任何方法,只有readonly
属性可用于获取特定于实例的信息,例如localizedDescription
,localizedTitle
和price
。但它是如何初始化的?初始化此类实例的代码如果是readonly
,它们如何首先设置这些属性?我看到这个班级也有一个id _internal
ivar;这是为了什么?
我常常使用类似于SKProduct
的接口,但我的属性不能是readonly
,因为我不知道如何在需要初始化实例时设置它们,例如在XML解析代码中。
答案 0 :(得分:1)
您提供的结构是C,C ++和Objective C用于声明位域的方式。它比#define MYFLAG 0x0001
更有优势,因为您可以进行编译器检查,因此您不会执行以下任何操作:
flag=34
)#define
)意外使用一个myColor=FLAG_TEMPERATURE_HIGH
。您可以在C ++中进行结构分配的同时设置所有变量。我上次看的时候你不能用C或Objective-C做到这一点,但你现在可以这样做。
您可以像设置任何其他实例变量一样设置和获取这些标志。