Добираться в основе этого вопроса... [Обратите внимание, что реализации не-JVM могут сделать вещи по-другому, если позволено JLS...]
Первый, иметь в виду, что локальная переменная "o" в примере является указателем, не фактическим объектом.
Все локальные переменные выделяются на стеке этапа выполнения в 4-байтовых слотах. удваивается и longs требуют двух слотов; другие примитивы и указатели берут тот. (Даже булевские переменные берут весь слот)
, зафиксированный размер стека этапа выполнения А должен быть создан для каждого вызова метода. Этот размер определяется максимальной локальной переменной "слоты", необходимые в любом данном пятне в методе.
В вышеупомянутом примере, обе версии кода требуют того же максимального количества локальных переменных для метода.
В обоих случаях, тот же байт-код будет сгенерирован, обновляя тот же слот в стеке этапа выполнения.
, Другими словами, никакая потеря производительности вообще.
ОДНАКО в зависимости от остальной части кода в методе, "объявление вне цикла" версия могло бы на самом деле потребовать большего выделения стека этапа выполнения. Например, сравните
for (...) { Object o = ... }
for (...) { Object o = ... }
с [1 110]
Object o;
for (...) { /* loop 1 */ }
for (...) { Object x =...; }
В первом примере, оба цикла требуют того же выделения стека этапа выполнения.
Во втором примере, потому что "o" живет мимо цикла, "x" требует дополнительного слота стека этапа выполнения.
Hope это помогает, - Scott
Вы можете использовать XCode и слева разверните «Продукты». Выделите свой .app и затем поднимитесь вверх, где написано «Действие», выпустите его и выберите «Показать в Finder»
По умолчанию вы увидите каталог сборки внутри каталога, содержащего ваш проект.
В этом каталоге сборки:
.build` содержит все объектные файлы, созданные во время компиляции
, и ряд папок со следующей схемой именования:
<build setting>-<platform>
Вероятно, вы что-то ищете вроде "Release-iphoneos". В этой папке вы должны найти пакет .app для отправки.