2013-12-19 4 views
4

Я ищу, чтобы уменьшить использование памяти в моем приложении, и одно место, которое мы можем потратить впустую, - это использование нашего autoreleasepools. Я думаю, что сейчас у нас есть все, что уместно, но я не уверен, поэтому я хотел бы сделать некоторые измерения в стратегических точках и посмотреть, будет ли полезно использовать больше блоков @autoreleasepool.Как узнать о содержании autoreleasepools на iOS?

Я сделал некоторые исследования и выяснили, о следующих методах исследования autoreleasepools, которые, возможно, работали в прошлом, но, видимо, не больше, по крайней мере, в XCode 5:

  • +[NSAutoreleasePool showPools] - это предназначено для печати информации об активных autoreleasepools, но, похоже, больше ничего не делает - XCode не считает, что это вещь

  • _objc_autoreleasePoolPrint - Я нашел несколько ссылок на эту функцию при переполнении стека , но XCode настаивает на том, что он не существует и не будет ссылаться на него если я объявляю его как экстерном

Наш кодовая достаточно большой, что просто вставляя дополнительные autoreleasepools везде бы дураки побегушках, так что я ищу способ, чтобы выяснить, сколько объектов «в пул "в любое конкретное время. Таким образом, я могу добавить больше пулов в те немногие места, которые им нужны, а не бросать их повсюду.

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

Благодарим за помощь!

+0

Попробуйте добавить слабый атрибут импорта ('__attribute __ ((weak_import))') в extern '_objc_autoreleasePoolPrint'. –

+0

Такая же ошибка компоновщика, к сожалению. :( – Colen

ответ

0

Использование инструментов было бы хорошей идеей в этом случае, так как это обеспечило бы много дополнительной информации, которая поможет вам лучше понять использование памяти в вашем приложении. В качестве общего введения, я бы рекомендовал сессию Исправление проблем с памятью в 2013 WWDC

Кроме того, here найти ссылку на ответ с некоторыми хорошими дополнительными подсказками

Если вы действительно хотите, чтобы проверить использование памяти в некоторый определенный сегмент кода, вы можете добавить NSLog() для печати временных меток в Консоли и использовать их для поиска интервалов на графике, но я считаю, что всегда лучше просто просматривать данные в целом и пытаться достичь графика памяти как можно более равномерным, а пулы авторефератов могут помочь в этом, более равномерно распределяя использование.