国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

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

2020-07-26 02:49:16
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

寫在前面

昨天晚上寫的那個(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)兒說(shuō)就是當(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ù)組來(lái)說(shuō)吧,在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"}];}

從上面的代碼片段中很容易看出來(lái),當(dāng)控制器被加載完之后也就開始加載viewDidLoad中的內(nèi)容了,假設(shè)這個(gè)_infoArr是在某些事件被觸發(fā)之后才會(huì)被調(diào)用,這時(shí)就沒(méi)有必要再控制器加載完就去加載這個(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í)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 岳普湖县| 太谷县| 延津县| 温宿县| 仲巴县| 乌苏市| 安岳县| 来凤县| 郎溪县| 准格尔旗| 锦州市| 巩留县| 黑水县| 青阳县| 上思县| 漯河市| 敖汉旗| 长治市| 肇东市| 砀山县| 蛟河市| 山东省| 安塞县| 文安县| 中超| 那坡县| 涡阳县| 阿勒泰市| 静宁县| 海城市| 凤翔县| 秭归县| 阳江市| 囊谦县| 福鼎市| 阜新市| 会宁县| 神木县| 宜都市| 普安县| 南雄市|