В чем заключается магия NSAutoreleasePool в платформе Objective-C / cocoa?

Я обнаружил, что пример инфраструктуры Objective-C / cocoa содержит следующий код.

int main()
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    // Create an array
    NSArray *month = [NSArray arrayWithObjects:@ ... nill];

    [pool drain];
}
  • Q1: В чем заключается магия (Почему мне нужно иметь Код NSAutoreleasePool?)? Какая магия происходит между блоком NSAutoreleasePool и дренажным блоком пула ? Я вижу, что сам выпускать * месяц не нужно. Причина в том, что он находится внутри блока NSAutoreleasePool и пула стока ?

  • Q2: В Xcode мне уже предоставлена ​​функция main (). В этом случае, как я могу использовать NSAutoreleasePool и сток пула ?

Например: Предварительный компилятор Android Строитель Java Конструктор пакетов Android Глядя на результат ...

После установки подключаемого модуля ADT для проекта Android активны следующие сборщики:

  • Диспетчер ресурсов Android
  • Предварительный компилятор Android
  • Конструктор Java
  • Android Package Builder

При просмотре выходного каталога создаются следующие артефакты:

  • resources.ap_ (просто APK / ZIP-файл с ресурсами и без кода)
  • gen / R.java (автоматически сгенерированный список ресурсов )
  • .class файлы с байт-кодом java
  • classes.dex
  • $ {имя-проекта} .apk

В моем проекте я автоматически генерирую несколько артефактов кода и в целом нуждаюсь в более строгом контроле над процессом сборки. Сначала я подумал, что диспетчер ресурсов отвечает за создание resources.ap_, прекомпилятор создал R.java, построитель java сделал очевидное, а затем построитель пакетов Android создал classes.dex, затем объединил классы.dex и resources.ap_ для создания файла APK.

Я отключил первые два шага и создал собственный предварительный компоновщик, который создает копию resources.ap_, полагая, что это будет эквивалентно. Нет такой удачи.

К сожалению, последний Android Package Builder, похоже, отбирает ресурсы непосредственно из res / и игнорирует мои resources.ap_. Фактически, первые два шага сборки, похоже, не делают ничего, кроме генерации R.java.

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

[2011-02-27 20:25:28 - android-premium] ------------------------------
[2011-02-27 20:25:28 - android-premium] Android Launch!
[2011-02-27 20:25:28 - android-premium] adb is running normally.
[2011-02-27 20:25:28 - android-premium] Could not find android-premium.apk!

Итак, я застрял: с Android Package Builder (который не имеет заметной конфигурации), я должен предоставить отдельные файлы ./res/. Без него я не могу запустить проект на устройстве (не из Eclipse).

У кого-нибудь есть лучшие идеи / опыт в этой области?

7
задан Dave Dopson 28 February 2011 в 04:30
поделиться