是否可以分配UIView两次,我是否正确释放它?

时间:2011-05-05 20:07:13

标签: iphone objective-c memory-management

我希望创建UIView的多个实例,所以我想而不是创建新的变量我会分配一个UIView,然后再次重新分配它以创建另一个UIView。这个可以吗?我是否正确地发布了视图,或者在2次分配后,临时访问的保留计数是2还是只是将保留计数带到1?

NSMutableArray *array = [[NSMutableArray alloc] init];  

UIView *tempview = [[UIView alloc] initWithFrame:CGRectMake(15, 30, 320, 460)];

[array addObject:tempView];

tempview = [[UIView alloc] initWithFrame:CGRectMake(15, 30, 320, 460)];

[array addObject:tempView];

[tempview release];

[array release];

2 个答案:

答案 0 :(得分:6)

您需要在重新分配之前释放tempView,否则它将泄漏。

NSMutableArray *array = [[NSMutableArray alloc] init];  
UIView *tempview = [[UIView alloc] initWithFrame:CGRectMake(15, 30, 320, 460)];
[array addObject:tempView];
[tempView release]; //you need this to avoid leaking at the next line

tempview = [[UIView alloc] initWithFrame:CGRectMake(15, 30, 320, 460)];
[array addObject:tempView];
[tempview release];
[array release];

或者,您可以在每次分配/初始化时自动释放tempView,但最好在可以时释放,并且只在必要时使用自动释放。

答案 1 :(得分:0)

另外,如果您创建的所有视图都具有相同的框架,则可以在循环中执行相同的操作:

const int kViewCount = 8;

NSMutableArray * array = [[NSMutableArray alloc] initWithCapacity:kViewCount];

for(int i = 0; i < kViewCount; ++i)
{
    UIView *tempview = [[UIView alloc] initWithFrame:CGRectMake(15, 30, 320, 460)];
    [array addObject:tempView];
    [tempView release];
}

只需将kViewCount设置为您需要创建的视图数量