Использование памяти какао - PullRequest
0 голосов
/ 29 марта 2010

Я пытаюсь отследить какое-то специфическое поведение памяти в моем приложении Cocoa для ПК. Мое приложение выполняет большую часть обработки изображений с помощью NSImage и загружает эти изображения на веб-сайт по HTTP с использованием NSURLConnection.

После загрузки нескольких сотен изображений (некоторые очень большие) при запуске Instrument я не получаю утечек. Я также пробежал через MallocDebug и не получил никаких утечек. Когда я копаюсь в распределении объектов с помощью Инструмента, я получаю вывод, подобный этому:

GeneralBlock-9437184, Net Bytes 9437184, # Net 1
GeneralBlock-192512, Net Bytes 2695168, # Net 14

и т. Д., Для меньших размеров. Когда я смотрю на них подробно, они помечены как принадлежащие «Foundation» и созданные с помощью NSConcreteMutableData initWithCapacity. Во время загрузки HTTP я создаю тело сообщения, используя NSMutableData, поэтому я предполагаю, что это буферы, которые Cocoa для меня кэширует, когда я создаю объекты NSMutableData.

Есть ли способ заставить Какао освободить их? Я уверен на 90%, что выпускаю правильно (и Instruments и MallocDebug, кажется, подтверждают это), но я думаю, что Cocoa хранит их по причинам, потому что я выделяю так много буферов MSMutableData.

1 Ответ

0 голосов
/ 29 марта 2010

Если вы уверены, что правильно отпускаете принадлежащие вам объекты, то вы действительно ничего не можете (или не должны) делать. Эти блоки, как говорит Instruments, принадлежат Foundation, потому что NSConcreteMutableData, объект Foundation, создал их. Возможно, это какой-то кэш, который NSData хранит специально, но нет никакого способа узнать, что это такое.

Если вы считаете, что это ошибка, вы должны сообщить об этом в http://bugreport.apple.com. Правила владения памятью применяются и к классам, которые также плохо управляют памятью.

Кроме того, это может быть глупым вопросом, но какой вариант вы используете для инструмента Object Alloc? Все объекты созданы или созданы и до сих пор живут? Возможно, вы смотрите на распределение, которое больше не имеет значения.

...