首页 > 代码库 > 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懒加载、计算型属性、反射机制)