iphone - общий вопрос об объектах - PullRequest
0 голосов
/ 06 апреля 2010

У меня есть несколько UIImagesView, и я помещаю их в MutableArray. MutableArray сохраняется. Я добавляю их также как подпредставление представления.

После добавления каждого UIImageViews в представление я освобождаю их ... например ...

[myView addSubview:myImageView];
[myImageView release];

Если я не ошибаюсь, у каждого imageView теперь есть retainCount 2, потому что они также хранятся в MutableArray.

Теперь я освобождаю представление, поэтому каждый элемент imageView retainCount падает до 1.

В какой-то момент я делаю:

myMutableArray = nil;

нормально ли это делать? Поскольку у imageViews еще есть retainCount, равный 1, я не уверен, что если положить массив в ноль, массив, в котором хранятся imageViews, выпустит изображения ... Я полагаю, что так, но я хотел бы услышать от вас, мастера! 1013 *

будет ли эта утечка?

спасибо

Ответы [ 2 ]

2 голосов
/ 07 апреля 2010

Вы должны игнорировать счет удержания, потому что система добавляет и удаляет счет удержания за кадром, и вы не можете отследить его.

Вместо этого вам нужно сосредоточиться на подборе пар удержания и выпуска, которые вы сами создаете.

В этом случае единственное, на что вам нужно обратить внимание - это, во-первых, возможное сохранение инициализации представлений изображения.

Обычно это выглядит примерно так:

UIImageView *imgView=[[UIImageView alloc] initWithImage....
[myMutableArray addObject:imgView];
[myView addSubview:imgView];
[imgView release];

И все готово. Массив и представление будут управлять собственным хранением, и вы сопоставили сохранение своей инициализации с выпуском, и все в порядке с миром.

0 голосов
/ 07 апреля 2010

Да, это утечка!Вы устанавливаете myMutableArray в ноль, не освобождая массив.Это приведет к утечке памяти из объекта NSMutableArray и всех содержащихся в нем объектов UIImageView.Если вы хотите избавиться от массива и его содержимого, то освободите массив так же, как и любой другой объект:

[myMutableArray release];
myMutableArray = nil;

Затем массив отправит сообщение о выпуске каждому объекту, который в нем содержится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...