美文网首页
Swift自动引用计数-可选链-协议-懒加载

Swift自动引用计数-可选链-协议-懒加载

作者: Never_Yg | 来源:发表于2017-06-28 11:48 被阅读6次

    自动引用计数

    •   Swift和OC一样,采用自动引用计数来管理内容
    ◦   当有一个强引用指向某一个动向时,该对象的引用计数会自动+1
    ◦   当该强引用消失时,引用计数会自动-1
    ◦   当引用计数为0时,该对象会被销毁
    

    循环引用

    swift提供了两种解决方案
    • weak : 和OC中的__weak一样是一个弱引用.当指向的对象销毁时,会自动将指针指向nil
    • unowned : 和OC中的__unsafe_unretained.当对象销毁时依然指向原来的位置(容易引起野指针)

    // 1.创建类
    class Student {
        weak var book : Book?
        // unowned var book : Book = Book()
    
        deinit {
            print("Student -- deinit")
        }
    }
    
    class Book {
        var owner : Student?
    
        deinit {
            print("Book -- deinit")
        }
    }
    
    // 2.创建对象
    var stu : Student? = Student()
    var book : Book? = Book()
    
    // 3.相互引用
    stu?.book = book!
    book?.owner = stu
    
    // 4.对象置nil
    stu = nil
    book = nil
    
    

    可选链

    返回值是可选类型
    ?.就是可选链,系统会自动判断可选类型是否有值

    有值则解包, 没值则赋值为nil

    协议

    基本使用

    // 1.定义协议
    protocol SportProtocol {
        func playBasketball()
        func playFootball()
    }
    
    // 2.遵守协议
    // 注意:默认情况下在swift中所有的协议方法都是必须实现的,如果不实现,则编译器会报错
    class Person : SportProtocol {
        var name : String?
        var age : Int = 0
    
        // 实现协议中的方法
        func playBasketball() {
            print("人在打篮球")
        }
    
        func playFootball() {
            print("人在踢足球")
        }
    }
    
    

    协议之间的继承

    protocol CrazySportProtocol {
        func jumping()
    }
    
    protocol SportProtocol : CrazySportProtocol {
        func playBasketball()
        func playFootball()
    }
    
    

    协议中可选方法

    // 1.定义协议
    @objc
    protocol SportProtocol {
        func playBasketball()
    
        optional func playFootball()
    }
    
    // 2.遵守协议
    class Person : SportProtocol {
        var name : String?
        var age : Int = 0
    
        // 实现协议中的方法
        @objc func playBasketball() {
            print("人在打篮球")
        }
    }
    
    

    懒加载-lazy

    对象在真正使用的时候才真正加载到内存中

    // 懒加载的本质是,在第一次使用的时候执行闭包,将闭包的返回值赋值给属性
        // lazy的作用是只会赋值一次
        lazy var array : [String] = {
            () -> [String] in
            return ["why", "lmj", "lnj"]
        }()
    
    

    文件权限

    1> internal: 内部的
    默认权限—在本项目中可以访问,一个包,一个target
    2>private: 私有的
    只能在本类中进行访问
    3>open: 公开的
    可以跨项目访问的
    4>fileprivate: Swift3.0 文件私有
    只要在本文件中都可以访问

    private和fileprivate的区别的,一个文件中可以有多个类

    相关文章

      网友评论

          本文标题: Swift自动引用计数-可选链-协议-懒加载

          本文链接:https://www.haomeiwen.com/subject/xzcucxtx.html