一般都是来搞定的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 等函数
网友评论