以记忆方式操纵子视图

时间:2011-08-16 21:58:35

标签: objective-c

这会保留我的子视图两次吗?

- (void)viewDidLoad
{
CGRect frame=CGRectMake(0, 0, 320, 460);
mapButtons*newButtons=[[mapButtons alloc] initWithFrame:frame];
self.mapButtons=newButtons;
[newButtons release];

[self.view addSubview:self.mapButtons];

[self.mapButtons addButtons:@"yo"];

一旦使用addSubview将其添加到视图层次结构中,它是否会获得超出ivar,self.mapButtons保留的额外保留计数?

我希望能够轻松操纵这个子视图,因此ivar;这是一个好方法,还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

EDIT 你提到memory-wise所以我认为可能需要一些清理。每个对象都有一个保留计数,该计数以retain递增,并递减release。当保留计数达到0时,将发送dealloc消息。因此,当你在一个没有使用内存的对象上添加额外的保留时,你只是递增计数器而不进行任何重复。

有几种方法可以获取对视图的引用,但是你这样做是一种好方法。另一种方法是标记视图并使用

self.view检索它
UIView *view = [self.view viewWithTag:tagId];

我更喜欢ivar方式,例如你是如何做到的(这会在ARC进来时改变)但我不会担心对象的实际保留计数。我专注于平衡我的保留/释放。

因此我使用规则,如果它是一个局部变量,我尽可能地在我们定义的范围内匹配我的保留/释放。例外是在dealloc