-
Notifications
You must be signed in to change notification settings - Fork 128
Open
Description
看了你这篇 《weak 弱引用的实现方式》 文章 ,里面提到 :
“单步运行,发现会跳入 NSObject.mm 中的 objc_initWeak() 这个方法。在进行编译过程前,clang 其实对 __weak 做了转换,将声明方式做出了如下调整。”
我想问下 你是怎么知道 调用 objc_initWeak
这个函数的? 我自己尝试着 clang
, 转换的代码如下:
//转换前
{
NSObject *obj = [[NSObject alloc] init];
__weak id obj1 = obj;
}
//转换后
{
NSObject *obj = ((NSObject *(*)(id, SEL))(void *)objc_msgSend)((id)((NSObject *(*)(id, SEL))(void *)objc_msgSend)((id)objc_getClass("NSObject"), sel_registerName("alloc")), sel_registerName("init"));
__attribute__((objc_ownership(weak))) id obj1 = obj;
}
然后 objc_ownership()
又是啥? 我在 runtime
源码里木有搜到...