欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS 懶加載的使用實(shí)例代碼

 更新時(shí)間:2017年05月11日 15:48:53   作者:劉光軍_Shine  
本篇文章主要介紹了iOS 懶加載的使用實(shí)例代碼,詳細(xì)的介紹了什么是懶加載和優(yōu)點(diǎn),及其實(shí)例。有興趣的可以了解一下

寫在前面

昨天晚上寫的那個(gè)代碼在配置數(shù)組數(shù)據(jù)的時(shí)候突然想到加載數(shù)據(jù)的時(shí)候可以不用在viewDidLoad中加載,可以什么時(shí)候用什么時(shí)候加載,這種技術(shù)就是這篇文章的懶加載方法。然后記錄一下。內(nèi)容如下:

什么是懶加載

懶加載又稱為延遲加載,它是指系統(tǒng)不會(huì)在初始化是就加載某個(gè)對(duì)象,而是在第一次調(diào)用(使用 get 方法)時(shí)才加載這個(gè)對(duì)象到內(nèi)存,簡(jiǎn)單點(diǎn)兒說就是當(dāng)對(duì)象被系統(tǒng)或者開發(fā)者需要用到的時(shí)候再去加載。它的實(shí)現(xiàn)方法實(shí)質(zhì)上就是覆寫該對(duì)象的 get 方法,并將該對(duì)象在初始化時(shí)需要實(shí)現(xiàn)的代碼在 get 方法中實(shí)現(xiàn)。

使用懶加載的優(yōu)點(diǎn)

  1. 不需要在 viewDidLoad 中實(shí)例化對(duì)象,簡(jiǎn)化代碼,使結(jié)構(gòu)清晰易懂,增強(qiáng)代碼的可讀性
  2. 對(duì)象的實(shí)例化在getter方法中,對(duì)象各司其職,降低代碼耦合性
  3. 提升初始化加載速度,對(duì)系統(tǒng)的內(nèi)存占用率會(huì)減小
  4. 減少內(nèi)存占用

viewDidLoad正常加載代碼示例

就拿昨天的那個(gè)功能的實(shí)現(xiàn)中用到的數(shù)組來說吧,在viewDidLoad中正常加載是這樣子的:

@interface ViewController ()<UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) NSArray *infoArr;//數(shù)組
@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  [self configData];
}

- (void)configData {
  _infoArr = @[@{@"title":@"出團(tuán)日期", @"routeName":@"線路名稱一", @"time":@"2015/11/21", @"num":@"20", @"price":@"124.0", @"code":@"DAGSDSASA"},
         @{@"title":@"余位", @"routeName":@"線路名稱二", @"time":@"2015/11/21", @"num":@"34", @"price":@"234", @"code":@"TAGDFASFAF"},
         @{@"title":@"價(jià)格", @"routeName":@"線路名稱三", @"time":@"2015/11/21", @"num":@"12", @"price":@"634", @"code":@"GHGASDAS"},
         @{@"title":@"團(tuán)代號(hào)", @"routeName":@"線路名稱四", @"time":@"2015/11/56", @"num":@"54", @"price":@"632", @"code":@"DAADSFAD"}];
}

從上面的代碼片段中很容易看出來,當(dāng)控制器被加載完之后也就開始加載viewDidLoad中的內(nèi)容了,假設(shè)這個(gè)_infoArr是在某些事件被觸發(fā)之后才會(huì)被調(diào)用,這時(shí)就沒有必要再控制器加載完就去加載這個(gè)數(shù)組數(shù)據(jù)了,如果事件不觸發(fā)就意味著_infoArr永遠(yuǎn)不會(huì)被加載,這樣的話在viewDidLoad中把它加載了就顯得很多余了并且也是很耗內(nèi)存的。

懶加載方法示例

- (NSArray *)infoArr {
  if (!_infoArr) {
    _infoArr = @[@{@"title":@"出團(tuán)日期", @"routeName":@"線路名稱一", @"time":@"2015/11/21", @"num":@"20", @"price":@"124.0", @"code":@"DAGSDSASA"},
           @{@"title":@"余位", @"routeName":@"線路名稱二", @"time":@"2015/11/21", @"num":@"34", @"price":@"234", @"code":@"TAGDFASFAF"},
           @{@"title":@"價(jià)格", @"routeName":@"線路名稱三", @"time":@"2015/11/21", @"num":@"12", @"price":@"634", @"code":@"GHGASDAS"},
           @{@"title":@"團(tuán)代號(hào)", @"routeName":@"線路名稱四", @"time":@"2015/11/56", @"num":@"54", @"price":@"632", @"code":@"DAADSFAD"}];
  }
  return _infoArr;
}

像上面這種調(diào)用getter方法的加載方式就是懶加載了,這樣當(dāng)需要用到_infoArr的時(shí)候,就會(huì)調(diào)用[self infoArr]方法(既是getter方法),此時(shí)系統(tǒng)會(huì)去調(diào)用getter方法,然后在getter方法中獲取數(shù)據(jù)的賦值,然后返回供使用(需要值得注意的地方就是在getter方法中不要使用self.infoArr, 因?yàn)閟elf.infoArr會(huì)調(diào)用getter方法,造成死循環(huán))。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • IOS10 配置權(quán)限詳細(xì)介紹

    IOS10 配置權(quán)限詳細(xì)介紹

    這篇文章主要介紹了IOS10 配置權(quán)限詳細(xì)介紹的相關(guān)資料,訪問相機(jī)、相冊(cè)、麥克風(fēng)、通訊錄等等權(quán)限,都需要進(jìn)行相關(guān)的配置,不然會(huì)直接crash,需要的朋友可以參考下
    2016-12-12
  • iOS masonry的使用方法

    iOS masonry的使用方法

    這篇文章主要介紹了iOS masonry的基本使用方法的相關(guān)資料,文章還介紹了CocoaPods的安裝過程,需要的朋友可以參考下面文字內(nèi)容
    2021-09-09
  • ios12中遇到的帶input彈窗的錯(cuò)位問題的解決方法

    ios12中遇到的帶input彈窗的錯(cuò)位問題的解決方法

    這篇文章主要介紹了ios12中遇到的帶input彈窗的錯(cuò)位問題的解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • iOS應(yīng)用開發(fā)中UITabBarController標(biāo)簽欄控制器使用進(jìn)階

    iOS應(yīng)用開發(fā)中UITabBarController標(biāo)簽欄控制器使用進(jìn)階

    這篇文章主要介紹了iOS應(yīng)用開發(fā)中UITabBarController標(biāo)簽欄控制器的使用進(jìn)階,實(shí)例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2016-03-03
  • IOS Xib控件拖拽與頁(yè)面跳轉(zhuǎn)實(shí)例

    IOS Xib控件拖拽與頁(yè)面跳轉(zhuǎn)實(shí)例

    下面小編就為大家分享一篇IOS Xib控件拖拽與頁(yè)面跳轉(zhuǎn)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • iOS中各種UI控件屬性設(shè)置示例代碼

    iOS中各種UI控件屬性設(shè)置示例代碼

    這篇文章主要給大家介紹了關(guān)于iOS中各種UI控件屬性設(shè)置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • IOS實(shí)現(xiàn)選擇城市后跳轉(zhuǎn)Tabbar效果

    IOS實(shí)現(xiàn)選擇城市后跳轉(zhuǎn)Tabbar效果

    這篇文章主要為大家詳細(xì)介紹了IOS實(shí)現(xiàn)選擇城市后跳轉(zhuǎn)Tabbar效果的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • iOS開發(fā)之統(tǒng)計(jì)Xcode工程的代碼行數(shù)

    iOS開發(fā)之統(tǒng)計(jì)Xcode工程的代碼行數(shù)

    這篇文章主要給大家介紹了在iOS開發(fā)中,如果想要統(tǒng)計(jì)Xcode工程的代碼行數(shù)該如何實(shí)現(xiàn),文章給出了詳細(xì)的方法和示例代碼,對(duì)大家的理解和學(xué)習(xí)很有幫助,本文中還分享了統(tǒng)計(jì)java文件和xml文件的代碼,有需要的朋友們下面來一起看看吧。
    2016-10-10
  • iOS使用 CABasicAnimation 實(shí)現(xiàn)簡(jiǎn)單的跑馬燈(無cpu暴漲)

    iOS使用 CABasicAnimation 實(shí)現(xiàn)簡(jiǎn)單的跑馬燈(無cpu暴漲)

    本篇文章主要介紹了iOS使用 CABasicAnimation 實(shí)現(xiàn)簡(jiǎn)單的跑馬燈(無cpu暴漲),具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • iOS動(dòng)態(tài)調(diào)整UILabel高度的幾種方法

    iOS動(dòng)態(tài)調(diào)整UILabel高度的幾種方法

    在iOS編程中UILabel是一個(gè)常用的控件,下面這篇文章主要給大家介紹了關(guān)于iOS動(dòng)態(tài)調(diào)整UILabel高度的幾種方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12

最新評(píng)論