Skip to content

纯属问个问题 ^ ^ #1

@ifelseboyxx

Description

@ifelseboyxx

看了你这篇 《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 源码里木有搜到...

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions