2011-06-13 20 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