iOS的ARC是怎么工作的

一般都是来搞定的objc_storeStrong,他的函数声明代码这样的

void * objc_storeStrong(void * addr, void * value) 

反汇编代码:

截屏2021-03-08 13.00.09.png

大概代码

// addr 属性指针的地址   value 对象的地址 (刚new出来时retainCcount  = 1);
void * objc_storeStrong(void ** addr, void * value) {

    if (value == addr) {
        return addr;
    }

    void *tmp = *addr;

    addr = value;
    objc_retain(*addr);  +1
    addr = objc_release(tmp); //释放原来的

    return addr;
}

1;所以就不释放了;
当你是只new 一个对象时 addr 就为NULL了。
此时objc_retain(NULL);
最后在release一次就释放了;
一般,你只需要new alloc 等操作。objc_storeStrong会自动生成在汇编代码里。

@interface ViewController ()
@property(nonatomic,strong)NSObject *objct;
@property(nonatomic,assign)NSObject *object2;
@property(nonatomic,weak)NSObject *object3;
@end

像这种会在自动生成的set 方法调用objc_storeStrong 或者weak 等函数

你可能感兴趣的:(iOS的ARC是怎么工作的)