//
// 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)
}
}
网友评论