• 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

  • 相关阅读:
    使用JS获取上一页的url地址
    禁止弹窗中蒙层底部页面跟随滚动的几种方法汇总
    一个Option请求引发的深度解析
    html li标签前面添加图标三种方法
    CSS3
    计算x
    计算圆周率
    最长公共子序列
    小字辈(左子右兄加强版)
    Excel列名和列序号转换
  • 原文地址:https://www.cnblogs.com/fusheng-it/p/6842140.html
Copyright © 2020-2023  润新知