對於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。
