美文网首页
Swift 循环引用 小结

Swift 循环引用 小结

作者: WMSmile | 来源:发表于2019-09-30 14:53 被阅读0次

在项目中自己写出了一个循环引用的典型例子,如下
Viewcontroller

class FirstViewController: UIViewController {

    var baseView:BaseView?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        self.baseView = BaseView()
        self.baseView?.backgroundColor = UIColor.red;
        self.view.addSubview(self.baseView!)
        self.baseView?.superself = self
        
    }
    
    deinit {
        print("first dealloc")
    }

}

BaseView

class BaseView: UIView {
    //    这边必须使用weak 或者 unowned
    weak var superself:UIViewController?
// unowned var superSelf:UIViewController?
    override init(frame: CGRect) {
        super.init(frame: frame);
        initViews();
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
  
    //MARK:-
    func initViews() -> Void {

    }

}

注:BaseView 所有子类也必须使用weak 来方式循环引用

block块的循环引用 我就不再多说了,其他博客有详解的,主要使用self的地方要使用 [unowned self][weak self]

简单的小例子

//
//  BaseView.swift
//  CycleCount
//
//  Created by wumeng on 2019/9/2.
//  Copyright © 2019 wumeng. All rights reserved.
//

import UIKit

class BaseView: UIView {
    
    //    这边必须使用weak
    weak var superself:UIViewController?
    
    override init(frame: CGRect) {
        super.init(frame: frame);
        initViews();
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    //MARK:-
    func initViews() -> Void {
        
//        使用 [unowned self] 和 [weak self]  防止循环引用 。
        
//        [unowned self] 是和self 共存的block 同时释放
        let clickHandler:(() -> Void) = {[unowned self] in
            
            self.WM_FUNC_block()

        }
        
        clickHandler()

//        [weak self]这时候的self是可选的类型
        let clickHandler1:(() -> Void) = {[weak self] in

            if self != nil {
                self!.WM_FUNC_block()
            }
        }

        clickHandler1()

    }
    //MARK:- blcok
    func WM_FUNC_block() -> Void {
        
    }


}


使用 [unowned self] 和 [weak self] 防止循环引用 。

  • [unowned self] 是和self 共存的block 同时释放,
  • [weak self]这时候的self是可选的类型

相关文章

  • Swift 循环引用 小结

    在项目中自己写出了一个循环引用的典型例子,如下Viewcontroller BaseView 注:BaseView...

  • Swift 循环引用 小结

    在项目中自己写出了一个循环引用的典型例子,如下Viewcontroller BaseView 注:BaseView...

  • swift基础小结1

    swift基础小结 for 循环OC与Swift对比 While循环与downhill循环 OC与swift使用的...

  • Swift--内存管理

    Swift内存管理概述 强引用循环 打破强引用循环 闭包中的强引用循环 Swift内存管理概述 Swift中的AR...

  • Day2

    1 单方向的引用不会产生循环引用。循环引用:闭包引用了self,self引用了闭包。Swift推荐使用解决循环引用...

  • Swift与OC真正去理解Block解决循环引用的技巧

    Swift与OC真正去理解Block解决循环引用的技巧 Swift与OC真正去理解Block解决循环引用的技巧

  • 解决swift Block内的循环引用

    解决swift Block内的循环引用

  • swift-循环

    循环 OC风格的 for Swift风格的 for 阶段性小结Swift 中使用 in 关键字标示循环的范围0.....

  • Swift 循环引用

    Swift 循环引用 [TOC] 前言 本本主要研究的是Swift中闭包捕获外部变量时产生的循环引用。全部示例是在...

  • 2019-12-04

    swift 闭包循环引用产生以及处理

网友评论

      本文标题:Swift 循环引用 小结

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