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

來源:互聯網
上載者:User

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

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

因為我們一般代理的都是當前的控制器 比如scrollView.delegate = self;這時候就成了上面的一個圈的循環參考。如果delegate為強指標,那麼也就是UIViewController和scrollView的retainCount 永遠最少都為1,所以有強指標指向的那個對象就不會銷毀,這就造成了記憶體泄露。所以要想避免這種記憶體泄露,也就是避免像上述情況那種的循環參考,必須delegate為弱指標,這樣,當UIViewContrller運行完自己的範圍要銷毀時,發現沒有強指標指向自己,並且retainCount=0,所以它就自動銷毀了,而它指向的UIView也就沒有了強指標指向,所以retainCount=0,所以也銷毀了,這樣NSArray也銷毀了,最後scrollView也銷毀了,就避免了記憶體泄露的問題。

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

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

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

聲明一個delegate,那麼即便delegate指向的對象銷毀了,delegate中依然會儲存之前對象的地址,即delegate成為了一個野指標...

 

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

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

所以答案就是,使用weak。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.