簡體   English   中英

如何發布子視圖

[英]How to release subviews

在我的iPhone / iPad應用中,

我要在主視圖中添加一個子視圖。

該子視圖具有一個imageview和一個按鈕。

什么時候釋放它們?

我的代碼在這里,

 customAlertView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 600, 600)];


         UIImageView *imgv=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"celebration.png"]];

          UIButton *btnOK=[UIButton buttonWithType:UIButtonTypeCustom];

         [btnOK setTitle:@"OK" forState:UIControlStateNormal];
         [btnOK addTarget:self action:@selector(alertOKClicked) forControlEvents:UIControlEventTouchUpInside];

         [customAlertView addSubview:btnOK];
         [customAlertView addSubview:imgv];
         [self.view addSubview:customAlertView];

         [imgv release];
         [btnOK release];



In one another method I am writing the code.

  [customAlertView removeFromSuperview];

我的困惑是imageview和按鈕在那里如果

  1. 我在這里釋放customalertview,它將自動釋放其子視圖。 如果是,那么沒有問題。
  2. 如果沒有怎么釋放它

    正如我在此所做的,添加子視圖后立即釋放對象。 這將導致我的“確定”按鈕不值得。 並且不會影響按鈕的單擊。

    所以,我應該從超級視圖中刪除。

[[customalertview子視圖]發布];

您的代碼是正確的。

將它們添加到警報視圖后,您可以釋放它們,因為警報視圖會保留它們。 當您調用removeFromSuperview ,它將自動釋放。

根據對現有答案的評論,我認為您遺漏的要點如下:

  • 視圖保留其子視圖-因此,如果創建一個新的視圖對象,並將其作為子視圖添加到其他對象,則可以安全地釋放它,除非您想自己對其進行引用。
  • 從其超級視圖中刪除視圖后,該視圖將被釋放。 因此,如果沒有其他對象保留它,它將被釋放。
  • 釋放視圖后,它將自動釋放其所有子視圖,依此類推。

盡快啟用ARC。

您做對了。 customalertview將自動釋放其子視圖。

當釋放計數為0時,您的對象將被釋放,這在理論上意味着,如果您編碼良好,則該對象不再有任何引用。

當您在視圖中維護自定義alertView時,您將擁有一個保留您的東西的對象,因此在刪除customAlertView之前,發布計數將不會為0,因為您已將其添加到customAlertView中,並且在刪除警報時,該警報將被釋放,它保留的所有東西也將被釋放。

希望它能幫助您了解事物的運作方式。

如果您想了解有關內存管理的更多信息,可以在這里查看Apple文檔

編輯:

我忘了提一下,刪除自定義警報后,您也需要釋放它。

如果您不了解內存管理,也可以看看: http : //cocoadevcentral.com/d/learn_objectivec/第7節

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM