Правильное использование @autoreleasepool

Я смешиваю некоторые ObjectiveC и C ++ в моем коде. (Мои файлы .mm файлы вместо .m.) Когда это правильная причина для переноса любого блока кода @autoreleasepool? Не зная, что я делаю, я обертываю любой блок кода, который может содержать любую переменную не ObjectiveC, будь то int, char, std::stringили любой его указатель на переменную не-ObjectiveC. Итак, каждый метод класса в моем классе C ++ имеет @autoreleasepool обертка внутри него.

Я делаю это неправильно?

Обратите внимание, что в предыдущих вопросах, связанных с этим вопросом, они говорили об использовании alloc, init и release, и теперь они кажутся устаревшими в XCode7 +. Итак, мне нужен последний совет по этому вопросу, а не старый совет. Мне нужен совет, касающийся XCode7 или выше.

1

Решение

Автозапуск пулов для ограничения срока службы вещей, которые были autoreleaseЯ внутри. autorelease API Какао Objective-C, поэтому только код Objective-C может autorelease вещи. Поэтому не имеет никакого смысла помещать пул автоматического выпуска вокруг блока чистого кода C / C ++, который вы точно никогда не вызовете в коде Objective-C.

Автозапуск пулов обычно полезен только в ситуациях, когда у вас есть цикл, который запускается много раз, когда каждая итерация может выполнить много autorelease, Обратите внимание, что не весь код Objective-C будет autorelease; это не очевидно. Некоторые API Какао будут autorelease а некоторые не будут. Если это весь ваш собственный код, написанный на ARC, он, вероятно, не autorelease,

1

Другие решения

Если вы используете AppKit, вам не нужно создавать пулы автоматического выпуска:

Application Kit создает пул автоматического выпуска в основном потоке в
начало каждого цикла цикла событий, и истощает его в
конец, тем самым освобождая любые автоматически выпущенные объекты, сгенерированные во время
обработка события. Если вы используете Application Kit, вы, следовательно,
как правило, не нужно создавать свои собственные пулы. Если ваше приложение
создает много временных автоматически выпущенных объектов в цикле событий,
тем не менее, может быть полезно создать «локальные» пулы автоматического выпуска
помочь минимизировать пиковый объем памяти.

(ссылка на сайт)

-1

По вопросам рекламы [email protected]