美文网首页
oc和swift中的懒加载

oc和swift中的懒加载

作者: 夏天爱西瓜汁 | 来源:发表于2017-11-28 11:17 被阅读87次

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会进行类型检查。

相关文章

  • Swift中的懒加载

    相信大家对OC中的懒加载都不陌生,但是Swift中的懒加载你又熟悉不熟悉呢?Swift中的懒加载较OC的简单了很多...

  • swift 中 Lazy,deinit用法

    * swift中懒加载写法,懒加载在Swift中是一个闭包。 懒加载详细介绍看这里 * OC中的dealloc方法...

  • Swift与OC差异 - 基础概念

    弱引用、强引用 OC Swift 懒加载 OC Swift

  • Swift中懒加载

    在Swift中对控件进行懒加载比oc中方便很多,只要lazy前缀,oc中懒加载方法,重写getter方法.Swif...

  • 15-Swift中的懒加载

    懒加载的介绍 swift中也有懒加载的方式(苹果的设计思想:希望所有的对象在使用时才真正加载到内存中) 和OC不同...

  • 17.懒加载使用

    懒加载的介绍 swift中也有懒加载的方式(苹果的设计思想:希望所有的对象在使用时才真正加载到内存中) 和OC不同...

  • 22 Swift 懒加载

    懒加载的介绍 swift中也有懒加载的方式(苹果的设计思想:希望所有的对象在使用时才真正加载到内存中) 和OC不同...

  • Swift懒加载

    懒加载的介绍 swift中也有懒加载的方式(苹果的设计思想:希望所有的对象在使用时才真正加载到内存中) 和OC不同...

  • swift最新语法总结(懒加载)

    懒加载的介绍 swift中也有懒加载的方式 (苹果的设计思想:希望所有的对象在使用时才真正加载到内存中) 和OC不...

  • 9,swift的懒加载(格式:lazy var 变量:类型 =

    懒加载的介绍 swift中也有懒加载的方式 (苹果的设计思想:希望所有的对象在使用时才真正加载到内存中) 和OC不...

网友评论

      本文标题:oc和swift中的懒加载

      本文链接:https://www.haomeiwen.com/subject/ojysbxtx.html