Библиотеки предварительного связывания в Xcode 4
Я разрабатываю приложение для клиента, и на одном из его устройств (iTouch 2-го поколения на iOS4) возникают проблемы с запуском приложения. Я провел несколько тестов на распределение / утечку и пришел к выводу, что в коде моего приложения нет ничего плохого. Я заметил, что при запуске наблюдается скачок распределения, и я пришел к выводу, что это из-за dyld, который динамически связывает библиотеки при запуске. Как мне выполнить предварительную привязку приложения в xcode4?
Форум OS X казался крайне неинформативным в том смысле, что они предполагают, что вы сможете его найти.:/
Любая помощь будет оценена. Спасибо!
(Я также хотел бы сделать новый тег для "предварительной привязки")
2 ответа
Согласно Apple, вам не нужно предварительно связывать ваши приложения для iOS. Если вы получаете большие всплески выделения, я думаю, это связано с архитектурой вашего приложения, а не с самой ОС.
Память, выделенная dyld, должна бледнеть в незначительности по сравнению даже с самыми основными выделениями, сделанными на самых ранних этапах времени выполнения. Среда выполнения Objective-C и другие системные инфраструктуры / библиотеки выделяют множество внутренних структур, которые необходимы для правильной работы.
Например, быстрый тест приложения, которое ничего не делает в основном, но делает один вызов NSLog(@"FooBar");
а затем режим сна (то есть никогда не запускающий UIApplication) выполнил 373 выделения, что в сумме составило 52 000 жизней.
Чтобы сделать шаг вперед, если вы действительно запускаете UIKit, вот так...
UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
... вы увидите ~600K в ~7800 выделенных ресурсах, как только приложение достигнет состояния покоя. Это все неизбежные вещи. Никакое предварительное связывание не спасет вас от этого. Я предлагаю не беспокоиться об этом.
Если вы видите, что выделяется на порядок больше памяти, то, как сказал Ник Рейман, это ваше приложение. В конце концов, память, выделенная динамическим компоновщиком, совершенно незначительна.