Чисто случайно обнаружил, что вызов [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
.
Если бы вы спросили меня десять минут назад, я бы сказал вам, что разница между двумя выражениями заключается в «синтаксисе и ничем другом». Учитывая, что я явно ошибаюсь, мне нужно понять, КАК я ошибаюсь, иначе я снова наткнусь на это.