在iOS開發(fā)摸爬打滾了許久扶平,談?wù)勛约簩W(xué)習(xí)以及開發(fā)iOS的一些經(jīng)驗(yàn)清女,文章比較隨性玩徊,算是記錄自己的成長吧的榛!希望有些我走的彎路以及曾經(jīng)讓我捉耳撓腮的問題可以幫助讀者少走一些彎路琼了。
本文來談一談在開發(fā)中非常實(shí)用的懶加載技術(shù)吧!
- 所謂的懶加載可以定義為:延時(shí)加載夫晌,即當(dāng)對象需要用到的時(shí)候再去加載雕薪。其實(shí)就是所謂的重寫對象的get方法,當(dāng)系統(tǒng)或者開發(fā)者調(diào)用對象的get方法時(shí),再去加載對象晓淀。
需要注意:重寫get方法時(shí)蹦哼,先判斷對象當(dāng)前是否為空,為空的話再去實(shí)例化對象
- 懶加載的優(yōu)點(diǎn)
- 不需將對象的實(shí)例化寫到viewDidLoad要糊,可以簡化代碼,增強(qiáng)代碼的可讀性
- 對象的實(shí)例化在getter方法中,各司其職锄俄,降低耦合性
- 對系統(tǒng)的內(nèi)存占用率會減小
viewDidLoad正常加載代碼示例
- 沒用懶加載的時(shí)候局劲,從plist獲取數(shù)據(jù),返回一個(gè)數(shù)組奶赠,需要寫在viewDidLoad方法中獲取
@interface ViewController ()
@property (nonatomic, strong) NSArray *shopData;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_shopData = [NSArray arrayWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:@"shop" ofType:@"plist"]];
}
@end```
- 顯而易見鱼填,當(dāng)控制器被加載完成后就會加載當(dāng)前的shopData,假如shopData是在某些事件被觸發(fā)的時(shí)候才會被調(diào)用毅戈,沒必要在控制器加載完就去獲取plist文件苹丸,如果事件不被觸發(fā),代表著shopData永遠(yuǎn)不會被用到苇经,這樣在viewDidLoad中加載shopData就會十分多余赘理,并且耗用內(nèi)存
#### 懶加載代碼示例
```objc
- (void)viewDidLoad {
[super viewDidLoad];
}
- (NSArray *)shopData
{
if (!_shopData) {
_shopData = [NSArray arrayWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:@"shop" ofType:@"plist"]];
}
return _shopData;
}
@end```
- 當(dāng)需要用到shopData的時(shí)候,就會調(diào)用[self shopData]的方法(即getter方法)扇单,此時(shí)系統(tǒng)會去調(diào)用getter方法商模,然后再getter方法中獲取plist文件內(nèi)容,然后返回使用(需要注意在getter方法里切勿使用self.shopData蜘澜,因?yàn)閟elf.shopData會調(diào)用getter方法施流,造成死循環(huán))
#### 總結(jié):懶加載即用到時(shí)方去加載對象
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者