2011-12-01 48 views
0
-(void)add 
{ 
    Myview *optionV =[[Myview alloc] initWithFrame:CGRectMake(80,80, 590, 25)]; 
    [interactiveView addSubview:optionV]; 

    //interactiveView is UIView added from the nib and has an IBoutlet. 
} 

现在如果添加方法被称为10倍。如何管理内存。为Myview创建@property的最佳方式是什么?这是如何工作在ARC

+1

所有罚款,此代码在每次ARC – beryllium

+0

当调用add方法MyView的新对象被创建并添加到交互式视图?以前的对象会发生什么。将交互式视图保留它们。 – ashish

回答

4

ARC增加了在编译时一个简单的释放,使你的代码会以这种方式被改写:

-(void)add 
{ 
    Myview *optionV =[[Myview alloc] initWithFrame:CGRectMake(80,80, 590, 25)]; 
    [interactiveView addSubview:optionV]; 
    [optionV release]; //Will be added when compiled, Don't add it your self. 
} 
+6

为了让事情100%清楚,重要的是要记住一个视图“保留”它的子视图,并在它们被移除时释放它们。 – Jasarien

+1

@Jasarien:可能这是更好的措词,因为它是interactiveView的责任,如果它想保留optionV?总的原则是每个班级都负责自己的记忆管理; UIViews保留子视图的具体事实并不是ARC编译器意识到的。 – Tommy