swift_043(Swift 懒加载(lazy) )
来源:互联网 发布:ubuntu 17.10 安装wine 编辑:程序博客网 时间:2024/06/06 20:07
懒加载的优点
懒加载(lazy load),其实是延时加载,它的优点显而易见,首先,懒加载将对象的创建延迟到了需要对象的时候,这样减少了内存开销;其次,懒加载将创建对象、相关属性设置内聚在一个"{}"代码块内,降低了其他模块代码的复杂度。
// MARK tablview的 dataSource代理方法
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ return self.dataArray.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
// 1.得到cell
let cell = XWShopCell.cellWithTableView(tableView)
// 2.传递模型
cell.wine = self.dataArray[indexPath.row]//3.回传cell
return cell
}
return self.dataArray.count
在Swift 存储属性必须初始化,确认类型,或者用可选类型,总之要确认类型,毕竟Swfit是类型安全语言,所以Swift提出了lazy属性,用法
// 1.分析 NSArray是一个闭包的返回值,而这是一个没有参数的闭包
lazy var dataArray:NSArray = { [] }()
// 2.也可以写成这样 lazy var dataArray:NSArray = { return NSArray() }()
// 3.从plist文件加载
lazy var dataArray:Array<XWWine> = {
let winePath = NSBundle.mainBundle().pathForResource("wine.plist", ofType: nil)!
let winesM = NSMutableArray(contentsOfFile: winePath);
var tmpArray:Array<XWWine>! = []
for tmpWineDict in winesM! {
var wine:XWWine = XWWine.wineWithDict(tmpWineDict as! NSDictionary)
tmpArray.append(wine)
}
print("我就运行一次")
return tmpArray }()
上述的代码,有点难理解,如果之前会Objective-C的block或者对C语言的函数指针理解透彻的,可以看成是一个代码块,然后self.dataArray的时候,就执行了代码块,但是重复调用,Lazy属性的代码块只会调用一次,lazy修饰的是一个存储属性,而存放的是闭包,我想内部,应该进行了优化
个人愚见,内部有一个静态的存储空间,当空间没值的时候,就会执行闭包代码,return返回值后,就会放到这个存储空间内,有点像Objective-C的单例对象 .
转载:http://write.blog.csdn.net/postedit
- swift_043(Swift 懒加载(lazy) )
- Swift 懒加载(lazy)
- swift lazy 懒加载
- Swift- lazy 懒加载
- Swift中的懒加载—@lazy
- Swift下的Lazy懒加载模式
- swift学习日志—— lazy懒加载
- swift 3.0 UITableView 懒加载写法(lazy)
- Swift的lazy关键字–延迟加载
- Swift 基本知识之十九 swift懒加载(lazy修饰符)
- Swift 懒加载(lazy) 和 Objective-C 懒加载的区别
- Swift 懒加载(lazy) 和 Objective-C 懒加载的区别
- Hibernate 懒加载lazy
- ruby 懒加载 lazy
- swift学习 -> 计算型属性(rendonly)、didSet、懒加载(lazy)
- Hibernate之lazy懒加载
- lazy(懒加载)属性解析
- Lazy Load 图片懒加载
- Dijkstr 算法 求单源最小路径
- docker--docker入门理论
- 安卓中为了获取context的方法和区别(getContext,getActivity,this,mainActivity.this等)
- python-opencv眼睛检测,笑脸检测
- 2、MYSQL
- swift_043(Swift 懒加载(lazy) )
- alsa mixer编程
- LeetCode26
- Android 5.0,6.0新特性
- 创建图片的热点区域
- 7. 图像分割实例
- Java中的单例模式理解与使用
- WPF图片模糊
- 使用XSell上传、下载文件到Linux服务器