一般都是來搞定的objc_storeStrong,他的函數(shù)聲明代碼這樣的
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 方法調(diào)用objc_storeStrong 或者weak 等函數(shù)