2012-01-02 3 views
3

Я работаю с Objective C в течение нескольких месяцев, и это был мой первый раз, когда я видел этот тип синтаксиса в объективе c. Кажется, я знаю его эквивалент, но я хотел быть уверенным.Проблема с синтаксисом в квадратных скобках + точка

В частности, код выглядит следующим образом

float imageHeight = [player texture].contentSize.height; 

Что такое «[игрок текстуры] .contentSize.height эквивалент? Я знаю, что точка и кронштейн синтаксис может быть то же самое

something.backgroundColor = [UIColor redColor]; 
[something setBackgroundColor:[UIColor redColor]]; 

выше два довольно много же ..

Так это то, что происходит в моем первом примере? Я просто никогда не видел сочетание синтаксиса в виде скобок и точек.

Thank's.

ответ

4
float imageHeight = [player texture].contentSize.height; 

Это, наверное, то же самое, как:

float imageHeight = [[player texture] contentSize].height; 

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

Итак, предполагая, что [player texture] возвращает указатель на объект (возможно, изображение), первое использование точечного синтаксиса позволяет получить доступ к этому объекту contentSize. Если -contentSize также возвращает указатель объекта, то следующее использование также переводит на вызов аксессора. Скорее всего, свойство contentSize является NSSize, а NSSize - структурой с полями width и height. Таким образом, второе использование точечного синтаксиса, скорее всего, извлекает поле height из этой структуры.

Смешение двух различных значений точечного синтаксиса отлично работает для получения значения, но вы получите сообщение об ошибке, если вы пытаетесь использовать его, чтобы установить значения. Если мои предположения в предыдущем абзаце верны, вы не можете сделать это:

[player texture].contentSize.height = 50; 
+0

Doh! Спасибо. =] –

+2

-1 неверно. '-texture' может возвращать' CGRect', или он может вернуть объект, чья '-contentSize' возвращает' CGSize', или '-contentSize' может вернуть объект с свойством' height'. Эрго, ваше предположение, что они эквивалентны, почти определенно ложно. –

+0

Хм .. так что я здесь точно смотрю? –

Смежные вопросы