iOS - путают на ARC и очищают NSMutableArray объектов - PullRequest
0 голосов
/ 10 ноября 2011

У меня есть вопрос о ARC nad NSMutableArray.

Вот случай:

У меня есть ListView с NSMUtableArray (arr1), который содержит все элементы списка.Отдельный поток, который выполняется в собственном коде, превращает обратные вызовы в объектный объект ListView.Собственный код создает новый NSMutableArray (arr2), заполняет его элементами моего пользовательского класса (каждый элемент имеет имя, идентификатор, значок и т. Д.), А затем передает его в ListView.

В ListViewсначала я очищаю массив с помощью [arr1 removeAllObjects], затем добавляю каждый элемент от arr2 до arr1 с помощью [arr1 addObject: ..].

NOTES :

*Весь код, как собственный, так и target-c, скомпилирован как код Objective-C ++.

* Часть собственного кода, которая выделяет и инициализирует arr2 (и все его элементы) и вызывает элементы ListView, - это всепо директиве @autoreleasepool

Мои вопросы;

  1. Есть ли утечки памяти из нативного кода?

  2. Есть ли утечки памяти из кода ListView?Будут ли старые элементы, которые я выпускаю с [arr1 removeAllObjects], вызвать утечку памяти?

  3. Предоставляет ли @autoreleasepool те же функции, что и ARC, то есть мне не нужно явно освобождать объекты?

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

1) Не должно быть, но иногда бывают небольшие утечки (я видел некоторые с цепочкой для ключей и некоторыми аудио библиотеками). Это не ваша проблема, и в большинстве случаев ее невозможно решить.

2) removeAllObjects отправляет релиз всем объектам в массиве. Это можно увидеть, поставив точку останова в методе dealloc.

3) да ARC @autoreleasepool работает так же

Ситуация, которую вы описали выше, выглядит для меня безопасной.

1 голос
/ 10 ноября 2011

Есть ли утечки памяти из нативного кода?

Не из-за отсутствия релиза / авто-выпуска (вы должны посмотреть на слабые / сильные свойства , обсуждение здесь )

Есть ли утечки памяти из кода ListView? Будут ли старые элементы я выпуск с [arr1 removeAllObjects] вызывает утечки памяти?

номер

Предоставляет ли @autoreleasepool те же функции, что и ARC, то есть I не придется явно освобождать объекты?

Вы НЕ МОЖЕТЕ освободить объекты с помощью ARC. Автозапуск будет только гарантировать, что объекты, которые были выделены в нем, будут уничтожены после закрывающей фигурной скобки (полезно, если у вас есть цикл for, который распределяет тонны материала на каждом проходе, и вы хотите убедиться, что все очищено между каждым из них , например).

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