iOS共用体
iOS共用体
一、何为共用体
在C语言中有union
联合体/共用体。
- union中可以定义多个成员,union的大小由最大的成员的大小决定。
- union成员共享同一块大小的内存,一次只能使用其中的一个成员。
- 对某一个成员赋值,会覆盖其他成员的值(也不奇怪,因为他们共享一块内存。但前提是成员所占字节数相同,当成员所占字节数不同时只会覆盖相应字节上的值,比如对char成员赋值就不会把整个int成员覆盖掉,因为char只占一个字节,而int占四个字节)
联合体 - union的存放顺序是所有成员都从低地址开始存放的。
使代码存储数据高效率的同时,有较强的可读性,可以使用共用体来增强代码可读性,同时使用位运算来提高数据存取的效率。
OC示例可以参考这篇文档。以下是我用swift实现共用体示例。有一个Person类如果要这个类有三个属性:高否、富否、帅否。我们一般是初始化三个Bool类型属性。但是这里我们使用共用体一个属性,1个字节容量完成。三个bool值,我们只要三位bit就能完全表示了。
我们取一字节最后三位表示,低位到高位依次是:帅、富、高。定义位掩码如下:
let TallMask: UInt8= 1<<2 // 0b00000100 4
let RichMask: UInt8= 1<<1 // 0b00000010 2
let HandsomeMask: UInt8= 1<<0 // 0b00000001 1
class Person {
//bits末三位存储以上三个bool值信息
private var bits: UInt8 = 0func setTall(_ tall: Bool) {
if tall {
self.bits |= TallMask
} else {
self.bits &= ~TallMask
}
}func tall() -> Bool {
return (self.bits & TallMask) > 0 ? true : false
}//补充setRich rich setHandsome handsome方法
func description() {
let t = tall()
let r = rich()
let h = handsome()
debugPrint("tall: \(t) rich: \(r) handsome: \(h) bits: \(bits)")
}
}
tall属性如上设置和获取,rich,handsome依葫芦画瓢。
let p = Person()
p.setTall(true)
p.setRich(false)
p.setHandsome(true)
p.description()//==========print=============
"tall: true rich: false handsome: true bits: 5"
bits值为5,转为二进制:
5
0b00000101
【iOS共用体】后三位
101
,对应tall=true
、rich=false
、handsome=true
。Tips: 位运算符
-
&
: 与 -
|
: 或 -
!
: 非 -
~
: 取反 -
^
: 异或
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 人生两件宝(好身体,好心情!)
- 2020-04-07vue中Axios的封装和API接口的管理
- 人如果没梦想,和咸鱼有什么区别(自媒体时代把握住就能咸鱼翻身)
- iOS中的Block
- 绘本讲师训练营【18期】14/21《我的情绪小怪兽》故事会新体验
- 一个健康的APP和健全的人格大体类似
- 自媒体形势分析
- 2019-03-27健康减肥126天
- 20190320《个体崛起》