swift_043(Swift 懒加载(lazy) )

懒加载的优点

懒加载(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-Cblock或者对C语言的函数指针理解透彻的,可以看成是一个代码块,然后self.dataArray的时候,就执行了代码块,但是重复调用,Lazy属性的代码块只会调用一次,lazy修饰的是一个存储属性,而存放的是闭包,我想内部,应该进行了优化


个人愚见,内部有一个静态的存储空间,当空间没值的时候,就会执行闭包代码,return返回值后,就会放到这个存储空间内,有点像Objective-C的单例对象 .


转载:http://write.blog.csdn.net/postedit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值