iOS - C 中的存儲類

文章引用

一、C 中的四種存儲類:

  • auto
  • register
  • static
  • extern

二、 auto

  • auto 是默認存儲類,通常不顯示的使用。
  • 當運行到程序塊的時候,auto 類型的變量能自動分配內存,并且在該程序塊運行完成時釋放。訪問 auto 變量僅限于聲明它們的 block,以及任何嵌套 block 內。

三、register

  • register 的行為就想 auto,但不同的是它們不是被分配到堆棧中,它們被鵆在一個寄存器中。
  • 寄存器能比內存提供更快的訪問速度,但是由于內存管理的復雜性,把變量放在寄存器中并不能保證程序變得更快。事實上,很可能由于在寄存器上占用了不必要的控件而最終被放緩執(zhí)行。使用 寄存器 世紀上只是一個給編譯器存儲變量的 建議 ,實現(xiàn)時可以選擇是否遵從這一點。
  • 寄存器 在 Objective-C 不夠普及其實挺好的:最好還是不要使用它,因為比起其他任何明顯的方式上加快應用程序,它更容易引起讓人更加頭疼的結果。

三、 static

  • 方法或函數(shù)內部的一個 static 變量保留其調用之間的值。
  • 全局聲明的一個 static 變量可以被任何函數(shù)或方法被調用,只要這些方法出現(xiàn)在跟 static 變量同一個文件中。這同樣適用于 static 方法。
  • 實例:創(chuàng)建單例
  + (instancetype)sharedInstance {
  static id _sharedInstance = nil;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
      _sharedInstance = [[self alloc] init];
  });
  return _sharedInstance;
}

四、 extern

  • 當 static 使得一個特定的文件中的函數(shù)和變量全局可見,extern 則使它們對所有文件可見。
  • 一般來說,全局變量并不是一個好主意。由于沒有如何及何時改變值的任何限制,常常導致無法調試的錯誤。在 Objective-C,對 extern 有兩個常見和實際的用途。
  • 全局字符串常量
    任何時候,如果你的應用程序要在一個公共頭文件申明一個非自然語言的字符串常量,都應該將其聲明為外部字符串常量。尤其是在聲明諸如 userInfo 字典,NSNotification 名稱和 NSError 域的時候。
    該模式是在公共頭文件里申明一個 extern 的 NSString * const,并在實現(xiàn)文件里定義該 NSString * const:
    • AppDelegate.h
extern NSString * const kAppErrorDomain;
- ***AppDelegate.m***
NSString * const kAppErrorDomain = @"com.example.yourapp.error";

字符串的值并沒有特別的需要注意的事情,只要它是唯一的。使用字符串常量建立了嚴格的約束,用該常數(shù)變量來代替字符串的文本值本身。

  • 公共方法
    一些全局的 API(經(jīng)常使用) :
//TransactionStateMachine.h
typedef NS_ENUM(NSUInteger, TransactionState) {
    TransactionOpened,
    TransactionPending,
    TransactionClosed,
};
extern NSString * NSStringFromTransactionState(TransactionState state);
//TransactionStateMachine.m
NSString * NSStringFromTransactionState(TransactionState state) {
  switch (state) {
    case TransactionOpened:
      return @"Opened";
    case TransactionPending:
      return @"Pending";
    case TransactionClosed:
      return @"Closed";
    default:
      return nil;
  }
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,599評論 0 6
  • 1.項目經(jīng)驗 2.基礎問題 3.指南認識 4.解決思路 ios開發(fā)三大塊: 1.Oc基礎 2.CocoaTouch...
    扶光啟玄閱讀 5,205評論 0 13
  • 1.寫一個NSString類的實現(xiàn) +(id)initWithCString:(c*****t char *)nu...
    韓七夏閱讀 3,875評論 2 37
  • 多線程、特別是NSOperation 和 GCD 的內部原理。運行時機制的原理和運用場景。SDWebImage的原...
    LZM輪回閱讀 2,129評論 0 12
  • 不是什么大病,但是發(fā)作起來簡直要命…… 相信不少偏頭痛患者都有這樣的體驗。 而且據(jù)統(tǒng)計,女性偏頭痛患者是男性患者的...
    郇卿閱讀 248評論 0 1

友情鏈接更多精彩內容