Выпустит ли NSMutableArray с выделенными UIViews также и UIViews? - PullRequest
0 голосов
/ 05 мая 2011

Хорошо, вот что я делаю.

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

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

UIView *tempview2 = [[UIView alloc] initWithFrame:CGRectMake(15, 30, 320, 460)];
[array addObject:tempView2];

[array release];

Будет ли освобождение массива освобождать два выделенных UIViews?

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Вы несете ответственность за освобождение представлений с момента их создания. Вот как это происходит:

Вы создаете представления с счетом сохранения 1. Когда они будут добавлены в массив, он сохранит их (оставьте количество = 2). Когда вы освобождаете массив, он освобождает представления (оставьте количество = 1). Вам все еще нужно отпустить их.

Правильный код будет:

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

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

UIView *tempview2 = [[UIView alloc] initWithFrame:CGRectMake(15, 30, 320, 460)];
[array addObject:tempView2];
[tempview2 release];

[array release];
2 голосов
/ 05 мая 2011

Если вы copy, alloc, retain или new что-то, вы отвечаете за его отправку либо release, либо autorelease.

Вы сказали [[UIView alloc] init...] поэтому вы должны release получившийся объект.

...