iOS 懶加載的使用實例代碼
寫在前面
昨天晚上寫的那個代碼在配置數(shù)組數(shù)據(jù)的時候突然想到加載數(shù)據(jù)的時候可以不用在viewDidLoad中加載,可以什么時候用什么時候加載,這種技術(shù)就是這篇文章的懶加載方法。然后記錄一下。內(nèi)容如下:
什么是懶加載
懶加載又稱為延遲加載,它是指系統(tǒng)不會在初始化是就加載某個對象,而是在第一次調(diào)用(使用 get 方法)時才加載這個對象到內(nèi)存,簡單點兒說就是當(dāng)對象被系統(tǒng)或者開發(fā)者需要用到的時候再去加載。它的實現(xiàn)方法實質(zhì)上就是覆寫該對象的 get 方法,并將該對象在初始化時需要實現(xiàn)的代碼在 get 方法中實現(xiàn)。
使用懶加載的優(yōu)點
- 不需要在 viewDidLoad 中實例化對象,簡化代碼,使結(jié)構(gòu)清晰易懂,增強(qiáng)代碼的可讀性
- 對象的實例化在getter方法中,對象各司其職,降低代碼耦合性
- 提升初始化加載速度,對系統(tǒng)的內(nèi)存占用率會減小
- 減少內(nèi)存占用
viewDidLoad正常加載代碼示例
就拿昨天的那個功能的實現(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":@"價格", @"routeName":@"線路名稱三", @"time":@"2015/11/21", @"num":@"12", @"price":@"634", @"code":@"GHGASDAS"}, @{@"title":@"團(tuán)代號", @"routeName":@"線路名稱四", @"time":@"2015/11/56", @"num":@"54", @"price":@"632", @"code":@"DAADSFAD"}]; }
從上面的代碼片段中很容易看出來,當(dāng)控制器被加載完之后也就開始加載viewDidLoad中的內(nèi)容了,假設(shè)這個_infoArr是在某些事件被觸發(fā)之后才會被調(diào)用,這時就沒有必要再控制器加載完就去加載這個數(shù)組數(shù)據(jù)了,如果事件不觸發(fā)就意味著_infoArr永遠(yuǎn)不會被加載,這樣的話在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":@"價格", @"routeName":@"線路名稱三", @"time":@"2015/11/21", @"num":@"12", @"price":@"634", @"code":@"GHGASDAS"}, @{@"title":@"團(tuán)代號", @"routeName":@"線路名稱四", @"time":@"2015/11/56", @"num":@"54", @"price":@"632", @"code":@"DAADSFAD"}]; } return _infoArr; }
像上面這種調(diào)用getter方法的加載方式就是懶加載了,這樣當(dāng)需要用到_infoArr的時候,就會調(diào)用[self infoArr]方法(既是getter方法),此時系統(tǒng)會去調(diào)用getter方法,然后在getter方法中獲取數(shù)據(jù)的賦值,然后返回供使用(需要值得注意的地方就是在getter方法中不要使用self.infoArr, 因為self.infoArr會調(diào)用getter方法,造成死循環(huán))。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
iOS應(yīng)用開發(fā)中UITabBarController標(biāo)簽欄控制器使用進(jìn)階
這篇文章主要介紹了iOS應(yīng)用開發(fā)中UITabBarController標(biāo)簽欄控制器的使用進(jìn)階,實例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-03-03IOS實現(xiàn)選擇城市后跳轉(zhuǎn)Tabbar效果
這篇文章主要為大家詳細(xì)介紹了IOS實現(xiàn)選擇城市后跳轉(zhuǎn)Tabbar效果的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07iOS開發(fā)之統(tǒng)計Xcode工程的代碼行數(shù)
這篇文章主要給大家介紹了在iOS開發(fā)中,如果想要統(tǒng)計Xcode工程的代碼行數(shù)該如何實現(xiàn),文章給出了詳細(xì)的方法和示例代碼,對大家的理解和學(xué)習(xí)很有幫助,本文中還分享了統(tǒng)計java文件和xml文件的代碼,有需要的朋友們下面來一起看看吧。2016-10-10iOS使用 CABasicAnimation 實現(xiàn)簡單的跑馬燈(無cpu暴漲)
本篇文章主要介紹了iOS使用 CABasicAnimation 實現(xiàn)簡單的跑馬燈(無cpu暴漲),具有一定的參考價值,有興趣的可以了解一下。2017-01-01iOS動態(tài)調(diào)整UILabel高度的幾種方法
在iOS編程中UILabel是一個常用的控件,下面這篇文章主要給大家介紹了關(guān)于iOS動態(tài)調(diào)整UILabel高度的幾種方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12