zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    vulnhub靶场 之 DC -1
    PHP反序列化中过滤函数使用不当导致的对象注入
    网络内生安全试验场-CTF答题夺旗赛(第四季)web知识
    BUUCTF 随便注
    SWPUCTF 2019 web
    春秋-SQLi题
    i春秋-“百度杯”CTF比赛 十月场-Login
    i春秋-第三届“百越杯”福建省高校网络空间安全大赛-Do you know upload?
    i春秋CTF-“百度杯”CTF比赛 九月场 XSS平台
    终于等到你,最强 IDE Visual Studio 2017 正式版发布
  • 原文地址:https://www.cnblogs.com/fusheng-it/p/6842140.html
Copyright © 2011-2022 走看看