我希望创建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];
答案 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设置为您需要创建的视图数量