Почему [foo view] ведет себя иначе, чем foo.view в моем коде?

Чисто случайно обнаружил, что вызов [bar.view addSubview:[foo view]]не работает, а [bar.view addSubview :foo.view]делает это в следующем коде.

foo=[fooViewController alloc] initWithNibName:@"fooViewController" andBundle:nil];
[self.view addSubview:foo.view];//here's where I swap the two commands out
[foo aFunctionThatSendsAMessageToOneOfFoosSubViews];

(Последняя строка связана с тем, что fooимеет некоторые подпредставления, которые необходимо настроить перед запуском, в частности, UIWebView. Если они не были созданы прежде чем сообщение будет отправлено, оно переходит в nil. С foo.)

Я думал, что эти два функционально идентичны — foo.viewвызывает тот же геттер, что и [foo view], но на практике это не так; точечный синтаксис дает желаемые результаты, а использование квадратных скобок приводит к отправке сообщения на nil.

Если бы вы спросили меня десять минут назад, я бы сказал вам, что разница между двумя выражениями заключается в «синтаксисе и ничем другом». Учитывая, что я явно ошибаюсь, мне нужно понять, КАК я ошибаюсь, иначе я снова наткнусь на это.

7
задан jscs 28 March 2012 в 01:36
поделиться