首页 理论教育 属性的懒加载实现技巧

属性的懒加载实现技巧

时间:2023-06-23 理论教育 版权反馈
【摘要】:因为懒加载会在一个不定的时间发生,并且懒加载的属性是会变化的,所以只能用var来定义一个懒加载的属性。这个闭包会根据Person当时的年龄age给ageDescription进行赋值。回到main.swift中,增加打印personA的ageDescription:只有程序第一次访问这个属性时才会赋值。那就要使用属性的get方法。读者一定会觉得很奇怪,为什么ageDescription不再根据age属性进行改变了呢?这里要注意一个很重要的知识点,懒加载的属性一旦执行过闭包函数之后,就不会再执行了,它是个一次性的行为。

属性的懒加载实现技巧

iOS应用一般在移动设备上运行,这类设备都有一个特点,就是计算能力和内存大小都不及普通计算机,所以为移动设备开发应用一定要以节省内存和计算资源作为出发点。

懒加载就是为了这种场景而诞生的,它是一种Swift的特殊语法,我们在不想使用这个特殊语法的时候也可以自己实现懒加载的机制。那什么是懒加载呢?从字面意思来解释,就是懒到最后一刻才加载,直到使用者要读取这个值的时候才初始化这个值,同时可能伴随一些计算逻辑。

因为懒加载会在一个不定的时间发生,并且懒加载的属性是会变化的,所以只能用var来定义一个懒加载的属性。在Person中,我们可以增加一个懒加载的ageDescription属性,类型是String,这个属性用来表示年龄的大小,示例如下:

只有程序第一次访问这个属性时才会赋值(在内存中占有一席之地)。这里使用了一个闭包的调用来给一个懒加载的属性赋值,其实是在获取这个属性值的时候运行的一段代码,并且需要返回最后给这个属性第一次赋的值。这个闭包会根据Person当时的年龄age给ageDescription进行赋值。这里要注意闭包最后的这对圆括号:如果没有圆括号,那么只是给这个变量赋值了一个闭包函数,有了圆括号,意味着这是一个闭包的调用。

回到main.swift中,增加打印personA的ageDescription:

只有程序第一次访问这个属性时才会赋值(在内存中占有一席之地)。这里使用了一个闭包的调用来给一个懒加载的属性赋值,其实是在获取这个属性值的时候运行的一段代码,并且需要返回最后给这个属性第一次赋的值。这个闭包会根据Person当时的年龄age给ageDescription进行赋值。这里要注意闭包最后的这对圆括号:如果没有圆括号,那么只是给这个变量赋值了一个闭包函数,有了圆括号,意味着这是一个闭包的调用。

回到main.swift中,增加打印personA的ageDescription:

控制台输出如下:(www.xing528.com)

控制台输出如下:

在打印完之后再次修改personA的属性值:

在打印完之后再次修改personA的属性值:

控制台输出如下:

控制台输出如下:

读者一定会觉得很奇怪,为什么ageDescription不再根据age属性进行改变了呢?这里要注意一个很重要的知识点,懒加载的属性一旦执行过闭包函数之后,就不会再执行了,它是个一次性的行为。那如果要做到实时的变化怎么办?那就要使用属性的get方法。

读者一定会觉得很奇怪,为什么ageDescription不再根据age属性进行改变了呢?这里要注意一个很重要的知识点,懒加载的属性一旦执行过闭包函数之后,就不会再执行了,它是个一次性的行为。那如果要做到实时的变化怎么办?那就要使用属性的get方法。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈