iOS 關於修飾代理用weak還是assign


對於weak:指明該對象並不負責保持delegate這個對象,delegate這個對象的銷毀由外部控制。

對於strong:該對象強引用delegate,外界不能銷毀delegate對象,會導致循環引用(Retain Cycles)

對於assing:也有weak的功效。但是網上有assign是指針賦值,不對引用計數操作,使用之后如果沒有置為nil,可能就會產生野指針;而weak一旦不進行使用后,永遠不會使用了,就不會產生野指針。




原文鏈接:http://www.jianshu.com/p/66b54e3a3960

 
 
之前不停應用的是assign,本日調試一段代碼的時間,發明順序會crash失落,報錯EXC_BAD_ACCESS 經由一番研討,發明若是應用 @property (nonatomic, assign, readwrite) id delegate; 聲明一個delegate之前一直使用的是assign,今天調試一段代碼的時候,發現程序會crash掉,報錯EXC_BAD_ACCESS


經過一番研究,發現如果使用

@property (nonatomic, assign, readwrite) id delegate;

聲明一個delegate,那么即便delegate指向的對象銷毀了,delegate中依然會保存之前對象的地址

即,delegate成為了一個野指針...


而使用weak,則不會有上述問題,當delegate指向的對象銷毀后,delegate = nil,

所以答案就是,使用weak。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM