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方法,而这里调用的get方法,但是上述代码中return self.dataArray.count会调用下面这句

- (NSArray *)dataArray {

return _dataArray

}

这样调用,如果成员属性dataArray开始没有复制的,那么在使用的时候,调用get方法,不重写的话,会报错,空指针,所以一般我们会重新get方法

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

这样就防止了成员属性没有赋值的情况

综上所述,oc的懒加载其实就是调用成员属性的get方法,初始化值,而swift的懒加载和oc不同

在swift存储属性必须初始化,确认类型,或者用可选类型,总之要确认类型,毕竟swift是类型安全语言,所以swift提出了lazy属性,用法如下

//1.分析 NSArray 是一个闭包的返回值,而这是一个没有参数的闭包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的时候,就执行了代码块,但是重复调用,lazy属性的代码块只会调用一次,lazy修饰的是一个存储属性,儿存放的是闭包。

懒加载就是惰性初始化,即在变量第一次使用的时候才进行初始化

swift中有两种方式俩惰性初始化

1.简单表达式

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

2.闭包

lazy var second:String = {

return "second"

} ( )

注意:

不要忘记最后的小括号。只有加了小括号,闭包才会在调用的时候立刻执行。

要类型声明lazy var second:String,这样Xcode会进行类型检查。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 9,259评论 0 6
  • 1、范型范型所解决的问题 函数、方法、类型:类,结构体,枚举,元组类型,协议参数,返回值,成员函数参数,成员属性类...
    我是小胡胡123阅读 4,328评论 0 1
  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 6,861评论 1 6
  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 8,554评论 3 25
  • 今天读了一篇文章,文章的名字叫做《啥叫幸福?》在这篇文章里中,作者认为: “你病,有人照顾你,这就是幸...
    蒹葭essay阅读 1,677评论 0 3