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

對於這個問題,之前一直沒有研究過,一直使用的是weak,也沒發現有什麼錯誤,好多東西其實就是規範,只要按照規範來,一般不會有什麼問題,知道前段時間找工作,面試官的一個問題把我問倒了。

問:代理聲明用哪個關鍵字?

答:@optional

問:代理必須實現用哪個關鍵字?

答:@required

問:代理修飾一般用哪個關鍵字?

答:@weak

問:可不可以用assign呢?

這回完了,平時一直用weak,沒用過assign,到底能不能用呢,後來查了一下,答案是可以用的,但是二者還是有一定的區別,對於weak:指明該對象並不負責保持delegate這個對象,delegate這個對象的銷燬由外部控制。

對於assing:也有weak的功效。但是網上有assign是指針賦值,不對引用計數操作,使用之後如果沒有置爲nil,可能就會產生野指針;而weak一旦不進行使用後,永遠不會使用了,就不會產生野指針。以上是自己搜索看到的解答,誰有更好的說法,可以評價回覆。採納優質意見。


weak比assign多了一個功能,當對象消失後自動把指針變成nil

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

發佈了33 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章