记忆问题:取得子视图的所有权

时间:2011-06-13 01:20:17

标签: iphone objective-c ipad uiview uiviewcontroller

如果我在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实例就可以了吗?

1 个答案:

答案 0 :(得分:2)

是的,IBOutlet比通过索引引用子视图要好得多。

retain不会导致属性复制set上的对象 - 这就是copy属性的含义 - 它只是将对象的保留计数增加到“声明”它。如果你还没有,我强烈建议你阅读iOS Memory Management Guide。另请注意其section on nibs