如果我在Interface Builder中构建了子视图,并且我想给它一个实际名称,我认为唯一的方法是在我的视图控制器中创建一个UIView实例变量,然后执行以下操作:
- (void)viewDidLoad
{
[super viewDidLoad];
self.moveView=[self.view.subviews objectAtIndex:0];
self.moveView.backgroundColor=[UIColor redColor];
}
通过这样做,我现在可以使用传统名称“moveView”来处理这个子视图,而不是通过视图层次结构中的索引号来解决它。
这是做这样的事情的好方法(在实际使用自定义视图类之外)吗?
另一种方法可能更简单,并且不要求你弄清楚索引号似乎只是创建一个UIView @property IBOutlet并将其分配给Interface Builder并执行此操作:
@property (nonatomic, retain) IBOutlet UIView * sensitivity;
@interface中的。
但是,我想知道这个@property的“保留”质量是否意味着我的UIView实际上是占用了两倍的内存,因为Interface Builder UIView是否也将它存储在内存中?或者在IB中将它连接起来只需要一个实际的UIView实例就可以了吗?
答案 0 :(得分:2)
是的,IBOutlet
比通过索引引用子视图要好得多。
retain
不会导致属性复制set上的对象 - 这就是copy
属性的含义 - 它只是将对象的保留计数增加到“声明”它。如果你还没有,我强烈建议你阅读iOS Memory Management Guide。另请注意其section on nibs。