寫在前面
昨天晚上寫的那個代碼在配置數組數據的時候突然想到加載數據的時候可以不用在viewDidLoad中加載,可以什么時候用什么時候加載,這種技術就是這篇文章的懶加載方法。然后記錄一下。內容如下:
什么是懶加載
懶加載又稱為延遲加載,它是指系統不會在初始化是就加載某個對象,而是在第一次調用(使用 get 方法)時才加載這個對象到內存,簡單點兒說就是當對象被系統或者開發者需要用到的時候再去加載。它的實現方法實質上就是覆寫該對象的 get 方法,并將該對象在初始化時需要實現的代碼在 get 方法中實現。
使用懶加載的優點
viewDidLoad正常加載代碼示例
就拿昨天的那個功能的實現中用到的數組來說吧,在viewDidLoad
中正常加載是這樣子的:
@interface ViewController ()<UITableViewDelegate, UITableViewDataSource>@property (nonatomic, strong) NSArray *infoArr;//數組@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是在某些事件被觸發之后才會被調用,這時就沒有必要再控制器加載完就去加載這個數組數據了,如果事件不觸發就意味著_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方法),此時系統會去調用getter方法,然后在getter方法中獲取數據的賦值,然后返回供使用(需要值得注意的地方就是在getter方法中不要使用self.infoArr, 因為self.infoArr會調用getter方法,造成死循環)。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答