内存问题:取得子视图的所有权
问题描述:
如果我有一个在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实例?
答
是的,IBOutlet
s比通过索引引用子视图更好。
retain
不会导致属性在集上复制对象 - 这就是copy
属性的用途 - 它只是将对象的保留计数递增到“声明”它。如果你还没有,我强烈建议你阅读iOS Memory Management Guide。另请注意其section on nibs。