Когда я впервые начал изучать Objective-C, мне было трудно понять концепцию указателей, что-то действительно базовое для понимания того, как на самом деле работает этот язык программирования. Для меня, исходя из опыта, не связанного с программированием, и ограниченных знаний языка программирования, у меня было базовое представление о переменных, содержащих фактические значения и непосредственно извлекающих их содержимое всякий раз, когда они вызываются или требуются. Например, x = a, где x - это заполнитель, содержащий a, а a может иметь любой вид. ценности или даже объекта. Многие новички придерживаются этой концепции. Однако в Objective-C это неверно для объектов, где объектом может быть что угодно, не являющееся примитивным типом, например целое число или число с плавающей запятой. Итак, что такое указатель ?

Когда большинство людей думают о указателе, они представляют себе стрелку, знак или даже человеческий палец, указывающий в направлении. Это именно то, чем является указатель в Objective-C: индикатор, указывающий на другое место, в данном случае на адрес в памяти. Другими словами, указатель - это ссылка на то, где расположен объект, не на фактические данные.

Основная причина концепции указателей заключается в том, что объект сам по себе действительно может содержать «большие фрагменты данных» и занимать много места в памяти или даже исчерпать ее, что, таким образом, влияет на производительность. По этой причине объекты расположены в динамической памяти, которая является динамически выделяемой памятью (огромная память фрагментов с более медленным доступом в человеческих терминах). Для сравнения, значения примитивов, которые расположены в стековой памяти для быстрого доступа.

Указатель описывается с помощью оператора *. Однако не стоит путать с концепцией умножения. Наличие звездочки перед именем переменной в операторе объявления указывает, что мы объявляем указатель. Например:

NSString * myName = @ ”Эрика”;

В этом примере переменная myName типа NSString указывает на адрес в памяти. Указатель * сигнализирует, что строка «Erica» находится в заданном адресе памяти после инициализации буквальным форматом @, обозначенным Objective-C. Эта адресная память является истинным контейнером фактических данных.

Именно по этой причине иногда у вас может быть два объекта с одним и тем же содержимым и типом, но не с одним и тем же адресом, поэтому каждая переменная-указатель действительно ссылается на разные объекты. Это усложняет предмет равенства и сравнения предметов. В результате при сравнении объектов полезно иметь в виду, какое сравнение вы ищете: контент, тип и / или адресную память. Лучше всего искать правильный метод при сравнении объектов, чтобы избежать путаницы и неправильного результата сравнения. В результате для этой проблемы, а также для многих других проблем, связанных с объектами при кодировании на Objective-C, вы должны помнить о том, что вы действительно работаете с указателями.