2011-06-13 15 views
1

如果我有一個在Interface Builder中內置的子視圖,並且我想給它一個實際名稱,我認爲唯一的方法是在我的視圖控制器中創建一個UIView實例變量,然後做這樣的事情:內存問題:取得子視圖的所有權

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
self.moveView=[self.view.subviews objectAtIndex:0];  
self.moveView.backgroundColor=[UIColor redColor]; 
} 

在這樣做,現在我可以這樣子視圖使用傳統的名字,工作「moveView」,而不是由視圖層次結構中的索引號處理相關問題。

這是做這樣的事情的好方法(實際上使用自定義視圖類之外)?

這也許是更容易,不需要你找出索引號的另一種方式似乎只是創造一個UIView @property IBOutlet中和將其賦值給界面生成器和這樣做:

@property (nonatomic, retain) IBOutlet UIView * sensitivity; 

@接口。但是,我想知道這個@property的「保留」質量是否意味着我的UIView基本上佔用了內存的兩倍,因爲Interface Builder UIView也不會將它存儲在內存中嗎?或者將它掛在IB使這些都是一樣的,只有一個實際的UIView實例?

回答

2

是的,IBOutlet s比通過索引引用子視圖更好。

retain不會導致屬性在集上覆制對象 - 這就是copy屬性的用途 - 它只是將對象的保留計數遞增到「聲明」它。如果你還沒有,我強烈建議你閱讀iOS Memory Management Guide。另請注意其section on nibs