oc和swift中的懶加載

2017.2.17

在TableView的代理方法中,

- (NSInteger)tableView:(UITableView*)tableView ? numberOfRowsInSection:(NSInteger)section{returnself.dataArray.count;}

這句 return self.dataArray.count;

其實就是利用

@property (nonatomic, strong) NSArray *dataArray;

@property的特性,為屬性生成了get和set方法,而這里調(diào)用的get方法,但是上述代碼中return self.dataArray.count會調(diào)用下面這句

- (NSArray *)dataArray {

return _dataArray

}

這樣調(diào)用,如果成員屬性dataArray開始沒有復(fù)制的,那么在使用的時候,調(diào)用get方法,不重寫的話,會報錯,空指針,所以一般我們會重新get方法

//重寫get方法- (NSArray *)dataArray{? ?if (nil == _dataArray){? ? ? ?_dataArray = [NSArray array];? ?}? ?return _dataArray}

這樣就防止了成員屬性沒有賦值的情況

綜上所述,oc的懶加載其實就是調(diào)用成員屬性的get方法,初始化值,而swift的懶加載和oc不同

在swift存儲屬性必須初始化,確認(rèn)類型,或者用可選類型,總之要確認(rèn)類型,畢竟swift是類型安全語言,所以swift提出了lazy屬性,用法如下

//1.分析 NSArray 是一個閉包的返回值,而這是一個沒有參數(shù)的閉包lazyvardataArray:NSArray= {[]} ()//2.也可以寫成這樣 lazy var dataArray:NSArray = { return NSArray() }()//3.從plist文件加載lazyvardataArray:Array = {letwinePath =NSBundle.mainBundle().pathForResource("wine.plist", ofType:nil)!letwinesM =NSMutableArray(contentsOfFile: winePath);vartmpArray:Array! = []fortmpWineDictinwinesM! {varwine:XWWine=XWWine.wineWithDict(tmpWineDictas!NSDictionary)? ? ? ? ?tmpArray.append(wine)? ? ?}print("我就運行一次")returntmpArray }()

上述代碼可以看成是一個代碼塊,然后self.dataArray的時候,就執(zhí)行了代碼塊,但是重復(fù)調(diào)用,lazy屬性的代碼塊只會調(diào)用一次,lazy修飾的是一個存儲屬性,兒存放的是閉包。

懶加載就是惰性初始化,即在變量第一次使用的時候才進行初始化

swift中有兩種方式倆惰性初始化

1.簡單表達式

lazy var first = NSArray(objects: "1", "2")

2.閉包

lazy var second:String = {

return "second"

} ( )

注意:

不要忘記最后的小括號。只有加了小括號,閉包才會在調(diào)用的時候立刻執(zhí)行。

要類型聲明lazy var second:String,這樣Xcode會進行類型檢查。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 4,087評論 0 6
  • 1、范型范型所解決的問題 函數(shù)、方法、類型:類,結(jié)構(gòu)體,枚舉,元組類型,協(xié)議參數(shù),返回值,成員函數(shù)參數(shù),成員屬性類...
    我是小胡胡123閱讀 941評論 0 1
  • 20- 枚舉,枚舉原始值,枚舉相關(guān)值,switch提取枚舉關(guān)聯(lián)值 Swift枚舉: Swift中的枚舉比OC中的枚...
    iOS_恒仔閱讀 2,425評論 1 6
  • Swift 介紹 簡介 Swift 語言由蘋果公司在 2014 年推出,用來撰寫 OS X 和 iOS 應(yīng)用程序 ...
    大L君閱讀 3,425評論 3 25
  • 今天讀了一篇文章,文章的名字叫做《啥叫幸福?》在這篇文章里中,作者認(rèn)為: “你病,有人照顧你,這就是幸...
    蒹葭essay閱讀 277評論 0 3

友情鏈接更多精彩內(nèi)容