美文网首页
iOS原理之Block的访问auto变量(值类型)的实现原理

iOS原理之Block的访问auto变量(值类型)的实现原理

作者: yqc5521 | 来源:发表于2019-05-19 11:14 被阅读0次
//
//  BlockBasementValueTypeAutoViewController.swift
//  iOS底层
//
//  Created by yanqunchao on 2019/5/18.
//  Copyright © 2019 yanqunchao. All rights reserved.
//

import UIKit

class BlockBasementValueTypeAutoViewController: UIViewController {
    
    typealias FuncPt = ((MainBlockImpl0)->())
    
  
    class BlockImpl: NSObject {
        var isa:UnsafeRawPointer? 
        var Flags:Int?
        var Reserved:Int?
        var FuncPtr:FuncPt? //函数地址,
    }
    
    /*
     * 访问auto局部变量的Desc类
     **/

    class MainBlockDesc0: NSObject {
        var reserved:Int?
        var BlockSize:Int?

        init(reserved:Int,BlockSize:Int) {
            self.reserved = reserved
            self.BlockSize = BlockSize
        }

        override init() {

        }

    }
  
    /*
     * 访问auto局部变量(值类型)的block类
     **/
    
    class MainBlockImpl0: NSObject {
        var imp: BlockImpl?
        var Desc: MainBlockDesc0?
        var age: Int?
        init(fp:@escaping FuncPt,Desc:MainBlockDesc0,flag:Int, age:Int) {
            imp = BlockImpl()
//            imp!.isa = &_NSConcreateStackBlock
            imp?.Flags = flag
            imp?.FuncPtr = fp
            self.Desc = Desc
            self.age = age
        }
        override init() {
            
        }
    }
    /*
     *block调用的函数地址
     **/
    func mainBlockFunc0(block:MainBlockImpl0){
        print("调用mainBlockFunc0函数获取的变量值为\(block.age!)))")
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .white
        
        blockWithAutoLocalVar()
    } 
    
    func blockWithAutoLocalVar(){ // 访问auto类型的局部变量的block
        var age = 10
 
        let mainBlockDesc0Data = MainBlockDesc0(reserved: 0, BlockSize: MemoryLayout.size(ofValue: MainBlockImpl0.self))

        let block = MainBlockImpl0(fp: mainBlockFunc0, Desc: mainBlockDesc0Data, flag: 0, age: age)

        age = 20

        block.imp?.FuncPtr!(block)
    }
}

相关文章

网友评论

      本文标题:iOS原理之Block的访问auto变量(值类型)的实现原理

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