удалить связь от AddSubview и добавить SubSubview с подсчетом ссылок? - PullRequest
1 голос
/ 03 апреля 2012

Я работаю над приложением, в котором я делаю много addSubview и removeFromSuperview, но приложение падает из-за слабого управления памятью.Я хочу знать, увеличивает ли addSubview счетчик ссылок представления, добавленного одним?и действительно ли removeFromSuperView уменьшает количество ссылок на единицу?

Ответы [ 5 ]

0 голосов
/ 03 апреля 2012

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

См. Справочный документ Apple UIView , где для addSubview егоутверждает, что «это представление сохраняется получателем».

0 голосов
/ 03 апреля 2012

Да, вы правы addSubView увеличивает счетчик ссылок добавляемого представления, а removeFromSuperView уменьшается на единицу.

0 голосов
/ 03 апреля 2012

Да, если вы создаете вид, подобный следующему:

UIView *myView = [[UIView alloc] init];

Число сохранений равно 1, и вы являетесь владельцем.

Если вы добавите этот вид в другой вид, второйпредставление будет его владельцем и увеличит количество, поэтому вам нужно выпустить:

[mySecondView addSubView:myView];
[myView release];

Теперь, если вы хотите удалить это представление, вы делаете:

[myView removeFromSuperView];

И ваше представление будет полностью освобождено, потому что removeFromSuperView уменьшит счетчик.

Итак, суммируя:

  • alloc и addSubView будут увеличивать ваш счетчик на 1 каждый
  • релизи removeFromSuperview будет уменьшать ваш счет на 1 каждый
0 голосов
/ 03 апреля 2012

да, точно ... addSubView увеличит счетчик ссылок представления на единицу, а removeFromSuperView уменьшит его также на единицу .. если вы столкнулись с некоторыми проблемами в управлении памятью, попробуйте отследить счетчик ссылок ваших просмотров, возможно, это не так будучи освобожденным.

0 голосов
/ 03 апреля 2012

Да, они делают. Как правило, всякий раз, когда вы добавляете объект в коллекцию (которая включает в себя массив подпредставлений объекта), он будет увеличивать свой счет.

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