OC底層原理 結(jié)構(gòu)體&聯(lián)合體

主動(dòng)已經(jīng)是我對(duì)熱愛東西表達(dá)的極限了

  • 什么是結(jié)構(gòu)體(struct)?

結(jié)構(gòu)體是C語言中一種重要的數(shù)據(jù)類型,該數(shù)據(jù)類型由一組稱為成員(或稱為域,或稱為元素)的不同數(shù)據(jù)組成,其中每個(gè)成員可以具有不同的類型。結(jié)構(gòu)體通常用來表示類型不同但是又相關(guān)的若干數(shù)據(jù)。

  • 什么是聯(lián)合體(union)?
  1. 聯(lián)合體中可以定義多個(gè)成員,聯(lián)合體的大小由最大的成員大小決定
  2. 聯(lián)合體的成員公用一個(gè)內(nèi)存,一次只能使用一個(gè)成員
  3. 對(duì)某一個(gè)成員賦值,會(huì)覆蓋其他成員的值
  4. 存儲(chǔ)效率更高,可讀性更強(qiáng),可以提高代碼的可讀性,可以使用位運(yùn)算提高數(shù)據(jù)的存儲(chǔ)效率
  5. 聯(lián)合體(union)也稱之為共同體

聯(lián)合體代碼定義如下:

union  {
    char a;
    short b;
    int c;
    float d;
    double e;
};
  • 結(jié)構(gòu)體(struct)與聯(lián)合體(union)區(qū)別:

結(jié)構(gòu)體struct
優(yōu)點(diǎn):存儲(chǔ)容量較大,包容性強(qiáng),且成員之間不會(huì)相互影響(占用不同內(nèi)存
缺點(diǎn):變量共存的,不管是否使用,都會(huì)開辟內(nèi)存,極大的浪費(fèi)了內(nèi)存空間

聯(lián)合體(union)
缺點(diǎn):每個(gè)變量是互斥的,且包容性差
優(yōu)點(diǎn):所有成員共用一段內(nèi)存,使內(nèi)存的使用更為精細(xì)靈活,同時(shí)也節(jié)省了內(nèi)存空間

聯(lián)合體位域定義如下:

  @interface LGCar(){
      // 聯(lián)合體
      union {
          char bits;
          // 位域
          struct { // 0000 1111
              char front  : 1;
              char back   : 1;
              char left   : 1;
              char right  : 1;
          };
        } _direction;
  }
  @end
  @implementation LGCar

  - (instancetype)init
  {
      self = [super init];
      if (self) {
          _direction.bits = 0b0000000000;
      }
      return self;
  }

  - (void)setFront:(BOOL)isFront {
    
      if (isFront) {
          _direction.bits |= LGDirectionFrontMask;
        } else {
            _direction.bits |= ~LGDirectionFrontMask;
      }
      NSLog(@"%s",__func__);
  }

  - (BOOL)isFront{
      return _direction.front;
  }

 - (void)setBack:(BOOL)isBack {
      _direction.back = isBack;

      NSLog(@"%s",__func__);
  }  

  - (BOOL)isBack{
      return _direction.back;
  }

  @end

從聯(lián)合體定義可以看出bits_direction存在互斥,
當(dāng)bits初始化時(shí),_direction無默認(rèn)值
當(dāng)_direction初始化時(shí),bits有默認(rèn)值

結(jié)構(gòu)體內(nèi)存計(jì)算原理及規(guī)則請(qǐng)參考:結(jié)構(gòu)體內(nèi)存計(jì)算

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。