【iOS/Swift】内存引用计数学习

内存地址获取代码

func printAddress(values:AnyObject...){
    for value in values {
        print(Unmanaged.passUnretained(value).toOpaque())
    }
    print("+++++++++++++++++")
}

打印指针地址

  • 方法一
let tt = {}
withUnsafePointer(to: &tt) {print($0)}
  • 方法二
func test(a: UnsafePointer<String>) {
    let b = UnsafeRawPointer(a)
    print("pointer::\(a)")
    let t = b.load(as: String.self)
    print("value::" + t)
}
  • 方法三
func address(o: UnsafeRawPointer) -> String {
    return String.init(format: "%018p", Int(bitPattern: o))
}

引用计数探索


class Student: NSObject {
    var name = "abc"
    
    func test() {
        let block = { [weak self] in
            guard let `self` = self else {
                return
            }
            self.name = "nnnn"
            self.name = "mmm"
            self.name = "mmm"
            print(CFGetRetainCount(self)) // 计数2
        }
        block()
    }
    
    deinit {
        print("deinit:\(CFGetRetainCount(self))")
    }
}

func test() {
    let user1 = Student() // 计数1
    user1.test()
}

test()
//第一种方式,KVC
[obj valueForKey:@"retainCount"]  

//第二种方式,runTime
OBJC_EXTERN int _objc_rootRetainCount(id);  
_objc_rootRetainCount(obj) 

//第三种方式
CFGetRetainCount((__bridge CFTypeRef)(obj))

您的一举一动都是对我的莫大支持

友情链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值