寫在前面
代碼在配置數(shù)組數(shù)據(jù)的時候可以不用在viewDidLoad中加載勋颖,可以什么時候用什么時候加載鹏往,這種技術就是這篇文章的懶加載方法议双。然后記錄一下缭保。內容如下:
什么是懶加載
懶加載又稱為延遲加載汛闸,它是指系統(tǒng)不會在初始化是就加載某個對象,而是在第一次調用(使用 get 方法)時才加載這個對象到內存涮俄,簡單點兒說就是當對象被系統(tǒng)或者開發(fā)者需要用到的時候再去加載蛉拙。它的實現(xiàn)方法實質上就是覆寫該對象的 get 方法尸闸,并將該對象在初始化時需要實現(xiàn)的代碼在 get 方法中實現(xiàn)彻亲。
使用懶加載的優(yōu)點
不需要在 viewDidLoad 中實例化對象,簡化代碼吮廉,使結構清晰易懂苞尝,增強代碼的可讀性
對象的實例化在getter方法中,對象各司其職宦芦,降低代碼耦合性
提升初始化加載速度宙址,對系統(tǒng)的內存占用率會減小
減少內存占用
viewDidLoad正常加載代碼示例
用數(shù)組來說吧,在viewDidLoad中正常加載是這樣子的:
@interface ViewController ()
@property?(nonatomic,?strong)?NSArray?*infoArr;//數(shù)組
@end
@implementation?ViewController
-?(void)viewDidLoad?{
[super?viewDidLoad];
[self?configData];
}
-?(void)configData?{
_infoArr?=?@[@{@"title":@"出團日期",?@"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":@"團代號", @"routeName":@"線路名稱四", @"time":@"2015/11/56", @"num":@"54", @"price":@"632", @"code":@"DAADSFAD"}];
}
從上面的代碼片段中很容易看出來调卑,當控制器被加載完之后也就開始加載viewDidLoad中的內容了,假設這個_infoArr是在某些事件被觸發(fā)之后才會被調用抡砂,這時就沒有必要再控制器加載完就去加載這個數(shù)組數(shù)據(jù)了,如果事件不觸發(fā)就意味著_infoArr永遠不會被加載恬涧,這樣的話在viewDidLoad中把它加載了就顯得很多余了并且也是很耗內存的注益。
懶加載方法示例
- (NSArray *)infoArr {
if(!_infoArr)?{
_infoArr?=?@[@{@"title":@"出團日期",?@"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":@"團代號",?@"routeName":@"線路名稱四",?@"time":@"2015/11/56",?@"num":@"54",?@"price":@"632",?@"code":@"DAADSFAD"}];
}
return ?_infoArr;
}
像上面這種調用getter方法的加載方式就是懶加載了,這樣當需要用到_infoArr的時候溯捆,就會調用[self infoArr]方法(既是getter方法)丑搔,此時系統(tǒng)會去調用getter方法,然后在getter方法中獲取數(shù)據(jù)的賦值提揍,然后返回供使用(需要值得注意的地方就是在getter方法中不要使用self.infoArr啤月, 因為self.infoArr會調用getter方法,造成死循環(huán))劳跃。