2011-11-04 57 views
3

這聽起來可能是一個新手問題,但我是iOS開發新手。 假設有這個代碼。在addSubview之後改變視圖,什麼是好的做法?

UILabel* label = [[UILabel alloc] init]; 
... 
[someScrollView addSubview:label]; 
... 
label.text = @"Some Text"; 

在addSubview之後修改視圖是不是很好的做法? 其實我的擔心大概是跟隨,標籤發佈到label.text之前可能被髮布,比如在viewDidUnload,對吧?分配將失敗。

總的來說我的問題是

  • 這是很好的做法addSubview後,修改的意見?
  • 在addSubview之後發佈視圖,以及後來如果我需要使用以下技術來獲取任何子視圖以查找它時,它是不錯的做法for (UIView *view in self.subviews) { if (...) ... }

回答

1

你的代碼是罰款,只要它是所有相同的方法和label不在任何...部分中重新分配。

在將視圖添加到子視圖之前或之後修改視圖沒有區別。

如果您已經分配了視圖,然後將其添加到子視圖中,並且您不希望單獨引用它,則應該釋放它 - 這是標準內存管理。超級視圖將保留其子視圖。

爲了再次得到你的子視圖參考的保持,你有兩個選項:

  • 添加它之前設置的子視圖的標籤,然後使用viewWithTag:得到它以後
  • 保持對它的引用子視圖作爲一個實例變量(在這種情況下,創建它後你不會釋放它,你會在dealloc上釋放它)。
0
  • 我用兩種方式 - 修改之前和之後,並沒有任何問題,無論哪種方式。超級視圖保留子視圖,因此如果您不釋放超級視圖或將子視圖設置爲NIL,那麼您很安全。

  • 是的,你需要釋放你addSubview後添加的觀點,但最容易做這樣的:

UILabel* label = [[[UILabel alloc] init] autorelease];

然後,它會自動釋放,你不必擔心明確釋放它。

3
  1. 將視圖的屬性添加爲子視圖後,可以更改視圖的屬性。這些屬性將會在UIKit渲染東西時在runloop的下一輪應用(或動畫)。

  2. 如果您不再需要擁有它,您應該在將其添加爲子視圖後絕對地釋放您的視圖。換句話說,遵循所有可可程序設計的內存管理指南。做addSubview會導致欠款視圖保留它(因爲它需要它)。如果需要,雖然變化對未來看法的屬性,你應該保留它,所以你可以訪問它

相關問題