Object-C--->Swift之(九)延迟存储属性

Swift引入了一种新的机制–延迟存储属性机制,在第一次被调用时才会被计算初始值的属性,声明时需要使用lazy修饰符。
注意:定义属性时一定得是变量(var),常量是无法使用延迟存储机制。

什么时候用到延迟存储?

当某个实例持有另一个创建成本较大的实例的引用时,使用延迟存储可以降低内存开销,从而提升性能。

 class Bird
 {
 var name:String
 var age:Int
 init(age:Int)
 {
  self.name="鸟类"
  NSThread.sleepForTimeInterval(2)
  self.age=age
 }
 }
 class  Ostrich
 {
   var name:String=""
   var age=Bird(age:3)
 }
 var ostrich=Ostrich()
 ostrich.name="鸵鸟"
 print(ostrich.name)

运行上面的代码,我们明显发现延迟了两秒才打印出来 鸵鸟 很明显我们根本就没有关心Ostrich的age属性,所以这两秒钟的等待是没有必要的,所以我们可以考虑在代码中改下

  lazy var age=Bird(age:3)

这样在没有调用age的话不会进行创建Bird实例,从而性能得到提升。没有延迟两秒的等待。

时间: 2024-09-20 16:49:45

Object-C--->Swift之(九)延迟存储属性的相关文章

Swift面向对象基础(中)——Swift中的存储属性和计算属性

1.存储属性:存储在类.结构体里的变量或者常量 2.分为:实例存储属性.类型存储属性 3.所有的存储属性必须显示的指定初始值,在定义时或者构造器当中指定 4.可选类型的存储属性可以不指定初始值 1 import Foundation 2 3 struct lengthRang { 4 var start:Int 5 //定义常量存储属性,可以不指定初始值 6 let length:Int 7 } 8 //创建结构体的实例变量 9 var len = lengthRang(start: 12, l

《从零开始学Swift》Swift 2.0学习笔记(Day 38)——构造函数与存储属性初始化

原创文章,欢迎转载.转载请注明:关东升的博客   构造函数的主要作用是初始化实例,其中包括:初始化存储属性和其它的初始化.在Rectangle类或结构体中,如果在构造函数中初始化存储属性width和height后,那么在定义他们时就不需要初始化了. Rectangle类代码如下: class Rectangle { var width: Double var height: Double init() { width = 0.0 height = 0.0 } } 如果存储属性在构造函数中没有初始

《从零开始学Swift》学习笔记(Day 31)——存储属性

原创文章,欢迎转载.转载请注明:关东升的博客   Swift中的属性分为存储属性和计算属性,存储属性就是Objective-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性返回数据. 存储属性可以存储数据,分为常量属性(用关键字let定义)和变量属性(用关键字var定义). 存储属性概念: 我们在前面曾用到过属性,Employee类和Department结构体.它们的类图如下,Employee 的部门属性dept与Department之间进行了关联. 我们可以在定义存储属性时指定默认值

Object-C--->Swift之(十)存储属性

计算属性相当于Object-C的getter.setter合成的属性,在Swift中结构体.类都可以定义计算属性 定义计算属性 [修饰符] var 计算属性名:属性类型{ get{ //getter方法执行体,该方法必须有返回值 } [set(形参名) { //setter方法执行体,该方法一定不能有返回值 }] } 注意:var计算属性只能定义成变量形式 enum Season { case Spring,Summer,Fall,Winter var info:String { get{ pr

JavaScript---网络编程(3)-Object、String、Array对象和prototype属性

本节学习JavaScript的对象和方法(函数)~ Object 对象 提供所有 JScript 对象通用的功能. obj = new Object([value]) 参数 obj 必选项.要赋值为 Object 对象的变量名. value 可选项.任意一种 JScript 基本数据类型.(Number.Boolean.或 String.)如果 value 为一个对象,返回不作改动的该对象.如果 value 为 null.undefined,或者没有给出,则产生没有内容的对象. 说明 Objec

iOS开发Swift篇—(九)属性

一.类的定义 Swift与Objective-C定义类的区别 Objective-C:一般需要2个文件,1个.h声明文件和1个.m实现文件 Swift:只需要1个.swift文件 Swift中类的定义格式 1 class 类名 { 2 // ... 属性和方法 3 } 二.属性 1.什么是属性 Swift中的属性(Properties),就类似于其他面向对象语言中的成员变量 2.属性的分类 按照官方文档的说明,属性可以分为以下几种 (1)存储属性(Stored Properties) (2)计算

《Swift开发指南》国内第一本Swift图书上市了

<Swift开发指南>国内第一本Swift图书上市了 既<苹果Swift编程语言开发指南>视频教程地址:智捷在线课堂,推出以来,受到大家高度关注,再接再厉推出: 国内第一本Swift开发图书:配有同步习题.同步视频教程,并全程展现即将上线的iPhone计算器项目: 分层架构设计解决Swift与Objective-C混合搭配问题:我们会及时更新本书版本欢迎大家关注. 新书预售地址: 京东预售:http://item.jd.com/11516346.html当当预售:http://pr

Object-C---&amp;gt;Swift之(十一)属性观察者

属性观察者机制能让程序在属性被赋值时获得执行代码的机会,用来监视属性的除初始化之外的属性值变化,当属性值发生改变时可以对此作出响应 具体包括两个特殊的回调方法: willSet(newValue):被观察的属性即将被赋值之前自动调用方法. didSet(old Value):被观察的属性被赋值完成之后自动调用该方法. 观察的范围 除了延迟存储属性之外的所有存储属性(包括实例存储属性或类型存储属性). 可通过重载方式为继承得到的属性(包括存储属性和计算属性)添加 属性观察者 定义语法格式 [修饰符

iOS中 Swift初级入门学习(三)

// // main.swift // LessonSwift-03 // // Copyright (c) 2015年 韩俊强. All rights reserved. // import Foundation // 声明一个类, 我们用class关键字修饰 // 类可以被继承, 它是引用类型 class Student { var name = "小米" var gender = "男" var age = 18 } // 创建一个student实例 let