Pointer 1 = Object
Указатель 1 содержит адрес объекта.
Pointer 2 = Pointer 1
Вы назначаете значение Указателя 1 для Указателя 2. Значение Указателя 1 является адресом Объекта. Таким образом, указатель 2 также содержит адрес объекта.
Pointer 1 = Object 2
Указатель 1 изменяется, но значение Указателя 2 не изменяется. Таким образом, указатель 2 по-прежнему содержит адрес объекта.
Объект указатель содержит адрес, то есть значение переменной указателя является адресом памяти. Если вы назначаете это другому указателю, то этот адрес назначается так же, как обычное целое число. Однако указание на указатель (то есть указатель на указатель или **) отличается от назначения указателя другому.
Для лучшего понимания вы можете воспользоваться "Учебником указателя C" (ну, Obj-C - это расширенный набор C, а указатель - из части C. Ничего особенного в Obj-C). Я бы порекомендовал эту книгу специально для начинающих.