Objective C / Объектно-ориентированные указатели - PullRequest
1 голос
/ 22 октября 2010

Я немного поиграл с целью C и считаю ее отличным языком ..

Исходя из C #, я нашел указатели немного сложными, но теперь я понимаю концепцию и как их использовать ..

есть:

MyObject* x = [[myObject alloc] callinitializer];

, которые создают новый объект в куче и указатель на стек ...

но может кто-нибудь объяснить, почему для доступа к свойствам объектов вы делаете это:

[x setsomeprop: @"I Like Pizza"];

вместо этого:

[*x setsomeprop: @"With Pineapple"];

без разыменовывающейся звезды, мы просто работаем с указателем, а не с самим объектом ??

Confuesd!

Спасибо

Daniel

Ответы [ 2 ]

6 голосов
/ 22 октября 2010

Нет. Синтаксис скобок - это особенность языка, специально предназначенная для объектов - он автоматически разыменовывает указатель.

0 голосов
/ 22 октября 2010

Отчасти это всего лишь результат того, как диспетчеризация методов работает в динамическом языке, таком как Objective-C.Почти нет ничего полезного, что вы можете сделать с указателем на объект с разыменованной ссылкой в ​​Objective-C.

Учитывая, что все объекты хранятся в куче, и управляют своим жизненным циклом с помощью retain / release (или посредством сборки мусора),указатель на объект - это именно то, что вы хотите использовать в 99% всех ситуаций.

Как оказалось, по сути, тот же механизм используется в C #, а Java - ссылки на объекты являются указателями, поэтому присваивание одногоссылка на другое заставляет их указывать на один и тот же объект, а не копировать объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...