首页 > 代码库 > Swift学习(4懒加载、计算型属性、反射机制)

Swift学习(4懒加载、计算型属性、反射机制)

懒加载、计算型属性、反射机制

1.懒加载:

目的:1.延迟创建,需要时加载,节省内存空间

2.避免开发中处理解包的问题(重要!!!)

 

知识:1.所有的UIView 及子类在开发是,一旦重写了够着函数,必须要实现initwithcoder函数以保证提供两个通道,目前Xcode会有提示。

2.在swift中懒加载的简单写法

lazy var label:UILabel = UILabel()

3.懒加载本质上是一个闭包,完整写法如下:

{}包装代码  ()执行代码

lazy var labe = {()->UILabel in

let l = UILabel()

return l

}()

注意的是了解就好,因为日常开发法中在闭包中的提示不太好,且需要注意循环引用

4.懒加载和OC的区别:

(1)在OC中是使用get方法实现懒加载的。

(2)OC中只要设置成nil以后,可以再通过get方法重新加载,而在swift中懒加载只能加载一次,如果设置成nil以后,就不能直接通过懒加载重新创建

 

2.计算型属性

引导:

1.getter & setter 仅用于演示,日常开发不用:

private var _name:String?

var name:String{

get{

return  _name

}

set{

_name = newValue

}

}

2. readonly  的实现:重写getter方法,通过只写get方法实现。

var title:String{

get{

return “mr 老王”

}

}

计算型属性:

1.readonly 简写  :直接return

var title:String{

return “老王”

}

其实这就是一个计算型属性:本身是不保存内容,都是通过计算获得的。类似于一个函数,没有参数只有返回值,每次计算都会重新计算一次。

 

3.懒加载和计算型属性的区别

1.代码非常类似!!! 懒加载只是多了一个 ‘lazy’ 和’=’

2.懒加载会在第一次访问的时候执行,闭包执行结束后会保存结果到属性,第二次调用的时候是不会重新执行闭包的。计算型属性每次访问都会执行一次闭包

 

4.利用重写set方法实现通过模型赋值改变UI

var person:Person? {

didSet {

//此时name属性有值,可以直接使用

self.text = person?.name

}

}

 

5.命名空间&反射机制

1.反射机制的概念

(1)在任意一个类,都能通过方法来获取这个类的所有属性和方法

(2)对于任何一个对象,都能调用他的任意一个方法和属性

(3)这种动态获取信息及动态的调用对象的方法功能成为Java 语言的反射机制

2.在OC中如何使用反射机制

(1)利用NSClassFromString 方法来使用字符串获取类

(2)isMemberofClass

(3)isKindofClass

(4)conformstoprotorol

(5)respondstoselector

(6)performSelector 或者obj_msgSend

3.主义事项:

(1)在Swift中有命名空间

(2)在同一个命名空间全局共享

(3)第三框架使用swift如果直接拖拽到项目中,从属于同一个命名空间可能会有重提

(4)在Swift中 NSClassFromString 是需要在前面添加命名空间的,例如: let clsName = “反射机制.ViewController”

(5)反射重要的目的就是为了解耦

(6)可以搜索“反射机制和工厂方法”继续学习反射机制

4.动态获得命名空间:

4.1 在info.plist中  bundle name 就是命名空间

4.2 info.plist 需要从bundle.main.infoDictionary读取

4.3 所以命名空间为:Bundle.main.infoDictionary[“CFBundleName”]

4.4 通过写分类实现代码精简:

4.4.1 通过函数调用

4.4.2 通过计算型属性。这种方法可以增加代码的可阅读型。

 

//demo下载地址:https://github.com/fushengit/Learn-Swift

 

Swift学习(4懒加载、计算型属性、反射机制)