В чем смысл этого синтаксиса Objective-C? - PullRequest
2 голосов
/ 12 августа 2011

Кто-нибудь, пожалуйста, уточните, в чем разница между этими двумя фрагментами?

Я знаю, что это экземпляр:

Class *myClass = [[Class alloc] init] ....etc

но что именно это?

(Class *)myClass .....etc

Спасибо

Ответы [ 3 ]

2 голосов
/ 12 августа 2011

Второй фрагмент - это приведение или параметр метода.Ни один из них не имеет ничего общего с созданием экземпляров.

Если в объявлении метода встречается (Class *)myClass, он просто определяет, каким типом должен быть параметр метода.Например, - (void) method:(Class *)myClass - это метод, который возвращает void и принимает один аргумент типа Class*.

Если (Class *)myClass встречается в другом коде, это приведение.По сути, он говорит, что нужно переосмыслить myClass как указатель на объект типа Class, независимо от его типа.Это похоже на приведение чисел - если x является int, (float)x преобразует его как float, так что вы можете использовать его в арифметике с плавающей точкой.Вы против использования приведения с объектами Objective-C.В одном месте вы увидите такие вещи, как приведение NS-объектов к CF-объектам, как в (CFURLRef)[NSURL fileURLWithPath:path].Но чаще всего объекты разных типов не будут правильно разыгрываться.

Кроме того, у вас есть ошибка в вашем первом фрагменте.На самом деле это будет [[Class alloc] init].Вы должны позвонить alloc, а затем init[init] не имеет смысла - он совершенно не соответствует синтаксису [object method] Objective-C.

1 голос
/ 12 августа 2011

Первый, при правильном синтаксисе, как вы говорите, является экземпляром.

Второй - приведение переменной "myClass" к указателю на экземпляр объекта Class.

0 голосов
/ 12 августа 2011

Второй фрагмент кода выполнен в стиле C. Он эффективно указывает компилятору обрабатывать myClass как значение типа Class * независимо от его объявленного типа. Без остальной части фрагмента (и предыдущего объявления myClass) невозможно сказать, почему вы захотите использовать приведение или какой эффект это даст.

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