Объекты CFString, объявленные [NSBundle mainBundle]

Я работаю над улучшением производительности моей игры ios cocos2d. Я проверял распределение памяти приложения с помощью инструмента Instruments, когда заметил одну вещь. Слишком много объектов CFString объявлено и удерживается вызовом [NSBundle mainBundle]. Это говорит,

Категория: CFString (неизменяемый) Ответственный абонент: [NSBundle mainBundle]

В моем коде есть много мест, где я написал следующие строки

[[NSBundle mainBundle] pathForResource:@"resource-name" ofType:@"png" isDirectory:imageDirectory];

Эта проблема CFString из-за кода выше, потому что я даю жестко закодированную строку в методе pathForResource? Или в чем может быть причина этой проблемы? Может кто-нибудь, пожалуйста, помогите? Это распределение CFString занимает около 2 Мб моего кода, поэтому я беспокоюсь об этом.

С уважением

2 ответа

Решение

Эти CFString связаны с наличием большого количества ресурсов в вашем комплекте приложений. В моем тестировании я обнаружил 1 CFString, выделенную для каждого файла в корне пакета. Предположительно, это какое-то кеширование путей.

В настоящее время я работаю над приложением с тысячами ресурсов в комплекте, и эти неизменяемые строки занимают ~ 300 КБ. Когда я удаляю большинство из них, у меня получается около 20 КБ, с около 100 CFStrings для ~ 80 ресурсов в комплекте.

Похоже, что ответом на их сокращение является размещение ресурсов в подкаталогах в комплекте. Вы можете использовать "Ссылку на папку" в XCode, чтобы сделать это.

Например, у вас может быть 1000 PNG для вашей игры. Поместите их в папку "Активы" в вашем проекте (на диске). Перетащите каталог "Assets" в Xcode и вместо создания группы создайте ссылку на папку.

Нет, это не то, почему NSBundle выделяет строки, и нет, вы не делаете ничего плохого там. Чрезвычайно маловероятно, что -[NSBundle mainBundle] фактически выделяет 2 МБ строк, поэтому я предлагаю вам взглянуть на некоторые другие трассировки стека выделения и посмотреть, сможете ли вы найти настоящего преступника.

Другие вопросы по тегам