iOS中weak和assign的區別

?assign和weak的區別

?本質區別

?速度比較: __unsafe_unretained > __weak

@property (nonatomic, assign) Test *test;? // 真實類型是 Test *__unsafe_unretained _test;

__unsafe_unretained的特點:

1.不是強引用, 不能保住OC對象的命

2.如果引用的OC對象銷毀了, 指針并不會被自動清空, 依然指向銷毀的對象(很容易產生野指針錯誤: EXC_BAD_ACCESS)

@property (nonatomic, weak) Test *test;? // Test * _Nullable __weak test;

__weak的特點:

1.不是強引用, 不能保住OC對象的命

2.如果引用的OC對象銷毀了, 指針會被自動清空(變為nil), 不再指向銷毀的對象(永遠不會產生野指針錯誤)

- 用途

- assign一般用在基本數據類型上面, 比如int\double等

- weak一般用在代理對象上面, 或者用來解決循環強引用的問題

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容