Объекты Objective C не являются значениями в том виде, в котором они приведены в ваших числовых примерах.Фактическая структура данных в значительной степени непрозрачна для программиста и управляется средой выполнения.Все, с чем вы имеете дело, это указатель на него.На самом деле вы никогда напрямую не изменяете указанный материал, а отправляете сообщения, которые приводят к его изменению.Принимая во внимание, что с помощью простого указателя на int
вы тут же получаете право и сами изменяете содержание (значение x
).
Пример NSString
представляет собойнемного особый случай, и это не является неразумным, чтобы найти его запутанным.Дело в том, что этот бит: @"Mac"
создает экземпляр памяти строкового объекта где-то, но то, что он фактически возвращает вам для назначения, - это только указатель на этот объект.Итак, эта строка:
comp = @"Mac";
- это присвоение указателя (@"Mac"
) справа переменной указателя (NSString* comp
) слева.Ни с одной, ни с другой стороны вы действительно имеете дело со значением непосредственно, оно просто выглядит как вы.
Причина, по которой все это работает именно так, а не, возможно, более интуитивно, как в Java, заключается в том, чтовсе это основано на C и использует тот же синтаксис.Но преимущество, как только вы привыкнете к этому, заключается в том, что он должен служить постоянным напоминанием о том, что вы когда-либо имеете дело только с ссылкой на ваши объекты, а мелкие мелочи управляются за кулисами.(Это хорошо, честно.)