在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
懒加载、计算型属性、反射机制 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
|
请发表评论