Вам нужно узнать о переменных стека и кучи, а также переменных локальных переменных и переменных экземпляра.
Когда вы вызываете метод, переменные, объявленные между скобками «{» и «}», являются ЛОКАЛЬНЫМИ переменными. Они существуют только для жизни метода. Эти переменные объявляются в «стеке».
Подумайте о стеке как стек листов бумаги для заметок. Когда вы вызываете метод, процессор кладет новый пустой лист бумаги в стек и использует этот лист бумаги для хранения всех локальных переменных из вашего метода. Когда вы дойдете до закрывающей скобки ("}"), метод вернется, и процессор берет лист бумаги этого метода со стека и отбрасывает его. Любая информация на этом листе бумаги теряется.
На самом деле, в любое время, когда вы используете открывающую скобу, компилятор удаляет новый чистый лист бумаги, а любые переменные, которые вы объявляете, добавляются на новый чистый лист бумаги. Когда вы попадаете в подходящую закрывающую скобу, верхний лист бумаги отбрасывается, и любые переменные, которые были объявлены между внутренними наиболее открывающимися и закрывающимися скобами, отбрасываются. Набор фигурных скобок определяет «локальный масштаб». Любые переменные, объявленные внутри этих фигурных скобок, видны только внутри фигурных скобок и только EXIST внутри фигурных скобок. Как только программа выйдет из закрывающей скобки, все переменные, определенные между открывающей и закрывающей скобкой, будут отброшены.
Стек такой же, но память компьютера. Стек больше похожа на стек пустых накопителей. Когда компьютер сначала запускается, все кубы пусты. Существует указатель стека, указывающий на первый пустой куб (расположение памяти) в верхней части стека. Если вы нажмете что-то в стек, он будет храниться в пустом кубе, а указатель стека будет перемещен до следующего пустого куба. Если вы выталкиваете что-то из стека, он извлекается из первого непустого кубика в верхней части стека, и указатель стека падает вниз, чтобы указывать на теперь пустой куб. Когда вы возвращаетесь из метода или выходите из набора фигурных скобок, компилятор помнит, сколько стекового пространства вы использовали, и выталкивает все, что вы храните со стека, и выбрасывает его.
Переменные экземпляра разные. Они хранятся в куче, которая является блоком памяти, который хранится в течение всей жизни вашей программы. Когда вы создаете объект, процессор вырезает блок памяти из кучи, достаточно большой для вашего объекта, и передает вам указатель на эту память. Затем вы инициализируете свой объект, который устанавливает память в «чистом» состоянии запуска. Если вы отпустите объект, этот бит памяти кучи освободится. Место хранения в куче не сверху вниз. Это больше похоже на первое пришествие, сначала поданное. Если вы создадите 10 объектов, а затем освободите 4 из них, в памяти стека будут дыры, в которых эти 4 объекта были раньше. Кучевое пространство больше похоже на столы в ресторане. Если вы запрашиваете блок памяти, ОС ищет свободный блок памяти на куче, достаточно большой (или больше) размер, который вы просили, так же, как в ресторане сидят группы людей на самом маленьком столе, который достаточно большой, чтобы посадите всю группу, даже если стол немного больше, чем группа.
Пожалуйста, ознакомьтесь, пожалуйста, как программировать, прежде чем начать с Objective-C !!! У вас здесь есть серьезные заблуждения! Objective-C не является языком новичка! –
'id currencyConverter;' не создает экземпляр. 'currencyConverter = [[CurrencyConverter alloc] init];' не является объявлением. –
Извините, я думаю, у меня пока нет имен вещей. Но эй, не могу винить меня за то, что я пытаюсь быть самоучкой:/ –