屬性copy.strong.weak總結

1.NSString類型的屬性為什么用copy ?

NSString類型的屬性可以用strong修飾,但會造成一些問題

用strong修飾的字符串,當NSMutableString的字符串給他賦值時,NSMutableString的字符串變了,它也會跟著改變,因為stong只是指針的引用,引用計數(shù)加1。

用copy修飾的字符串,不會隨著源頭的改變而改變,因為copy會復制一份。
如果源頭的字符串是不可變的,那么用copy和strong是一樣的,因為源頭是不可變的字符串嘛,所以用copy還是strong看你的需要了,想讓他隨著源頭改變就用strong,不想改變有用copy,一般不會讓它改變,所以安全起見,字符串會用copy

2.代理.手動拖線的控件為什么用weak ?

self->對象(比如person對象)->代理->self(設置代理時:self.delegate=self);
會造成循環(huán)引用, 使用weak表明該屬性定義了一種非擁有關系,為這種屬性設置新值時,既不保留新值也不會釋放舊值。
首先手動拖線的控件用weak不是因為會造成循環(huán)引用,self->view->sunViews->控件,這樣已經(jīng)有個強引用了,如果控件用strong,self->控件,這個控件有兩個強引用,釋放時要剪斷兩個對他的引用,如果有一個沒有釋放,這個控件就不能釋放了,當然用strong也沒有錯,還更加安全呢。

3.block為什么用copy

block的方法內(nèi)容是在棧區(qū)的,首先棧區(qū)是系統(tǒng)自動管理的,隨時會清除內(nèi)存,,再訪問時可能會造成野指針,copy關鍵字會把block的內(nèi)容復制到堆區(qū),堆區(qū)由程序員自己管理。

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

推薦閱讀更多精彩內(nèi)容