定义和初始化联合存储的Objective-C代码示例
#import <Foundation/Foundation.h>
// 定义一个联合
union Data {
int intValue;
float floatValue;
char charValue;
};
int main(int argc, const char * argv[]) {
@autoreleasepool {
union Data data;
// 初始化联合,这里选择初始化intValue
data.intValue = 10;
NSLog(@"intValue: %d", data.intValue);
// 这里如果访问floatValue或charValue,得到的是未定义行为,因为刚刚初始化的是intValue
}
return 0;
}
联合存储的特点
- 共享内存:联合的所有成员共享同一块内存空间,其大小为联合中最大成员的大小。例如上述
union Data
,如果int
是4字节,float
是4字节,char
是1字节,那么union Data
的大小为4字节。
- 同一时间只有一个成员有效:由于共享内存,在任意时刻只有最后一次赋值的成员是有效的,访问其他成员会导致未定义行为。
适用场景
- 节省内存:当程序需要在不同时刻使用不同类型的数据,但不需要同时使用时,可以使用联合来节省内存。例如,一个表示图形的结构体,可能有时是圆形(半径为
float
类型),有时是正方形(边长为int
类型),使用联合可以让这两个属性共享内存。
- 与C语言交互:在与C语言交互的场景中,特别是涉及到C语言库中使用联合的情况,Objective-C需要能够正确处理联合数据结构。