Использование objc_disposeClassPair () - PullRequest
5 голосов
/ 26 мая 2011

В API среды выполнения есть недокументированная функция, которая появляется (на основе нескольких игрушечных программ) для выполнения того, что ее название предлагает:

OBJC_EXPORT void objc_disposeClassPair(Class cls) 
     AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER;

Тем не менее, подробная информация довольно тонка на местах. Так что это скорее группа связанных вопросов, чем один:

  • Есть ли какие-нибудь хорошие статьи / посты в блоге, которые смотрят на это, или кто-нибудь имеет какой-либо опыт его использования (быстрый гугл предполагает, что разработчики PyObjC хотя бы рассмотрели его использование в какой-то момент)?
  • Полностью ли освобождены удаленные классы (не утечет ли приложение, которое часто создавало и удаляло классы?)
  • Есть ли какие-либо ошибки, которые стоит иметь в виду, помимо обычного о недокументированных API?
  • Где он (или может быть) используется Apple? Разгрузка NSBundle? КВО

1 Ответ

2 голосов
/ 27 мая 2011

Полностью ли освобождены удаленные классы (не утечет ли приложение, которое часто создавало и удаляло классы?)

Да, они будут полностью освобождены. Если вы посмотрите на функцию cycle в http://www.opensource.apple.com/source/objc4/objc4-437/test/classpair.m,, то обнаружите, что она одновременно выделяет и освобождает несколько классов. Реализация main, приведенная ниже, выполняет эту функцию 100 раз и проверяет утечки, что указывает на то, что они не выпустят реализацию, которая значительно утекла. Если вы хотите узнать больше, вы должны просмотреть код в http://www.opensource.apple.com/source/objc4/objc4-437/runtime/. Возможно, вы где-нибудь найдете реальный код яблока для обеих функций, а также где он используется.

...