關於removeFromSuperview關鍵的幾個點

來源:互聯網
上載者:User

removeFromSuperview
Unlinks the receiver from its superview and its window, and removes it from the responder chain.

譯:把當前view從它的父view和視窗中移除,同時也把它從響應事件操作的響應者鏈中移除。

分析:

這裡有兩個關鍵點,可以協助我們理解在ios當中view是怎麼來組織的:a。視圖的組織形式;b。響應者鏈;

今天只分析一下視圖的組織形式,關於響應者鏈是和事件處理息息相關的,另文再寫。

在ios當中,視圖的設計模式可以看做是組件模式,即以樹作為儲存的資料結構,這種資料結構具有明確的兩個特點:

1.父子關係分明,從根節點出發,通過分葉節點向下擴充,同一枝的上一個節點就是下一個節點的superview,下一個節點就是上一個節點的subview;不同枝如果同層,則為兄弟節點。

2.layer關係分明,layer在ios中對事件響應具有舉足輕重的作用,通常兩個重疊的控制項,處在上層的會優先響應;

從上面文檔的描述,我們可以看到,這兩個特性,也是view在操作時候的核心,即一個view的操作關係到兩個方面,視圖結構和響應者鏈。

removeFromSuperview,類似一個剪枝,執行此函數,就等於在樹形結構中找到該節點,剪去該節點及其子節點,而並非只是剪去該節點自己。同時,另一個操作就是把該對象從響應者鏈中移除。

- (void)removeFromSuperview
Discussion
If the receiver’s superview is not nil, the superview releases the receiver. If you plan to reuse a view, be sure to retain it before calling this method and release it again later as appropriate.

譯:如果當前view對象的父視圖不為空白,則父視圖會release一次當前視圖對象。如果你還想重用當前view,你應該在調用removeFromSuperview之前,retain一次當前view對象,但不要忘記,在恰當的時候要release它,以確保沒有記憶體泄露。

Never call this method from inside your view’s drawRect: method.

永遠不要在你的view的drawRect方法中調用removeFromSuperview;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.