这会保留我的子视图两次吗?
- (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;这是一个好方法,还是有更好的方法?
答案 0 :(得分:0)
EDIT
你提到memory-wise
所以我认为可能需要一些清理。每个对象都有一个保留计数,该计数以retain
递增,并递减release
。当保留计数达到0时,将发送dealloc
消息。因此,当你在一个没有使用内存的对象上添加额外的保留时,你只是递增计数器而不进行任何重复。
有几种方法可以获取对视图的引用,但是你这样做是一种好方法。另一种方法是标记视图并使用
从self.view
检索它
UIView *view = [self.view viewWithTag:tagId];
我更喜欢ivar方式,例如你是如何做到的(这会在ARC进来时改变)但我不会担心对象的实际保留计数。我专注于平衡我的保留/释放。
因此我使用规则,如果它是一个局部变量,我尽可能地在我们定义的范围内匹配我的保留/释放。例外是在dealloc