Использование self вызывает «сеттер» вашего класса для вызова этой переменной, вместо непосредственного изменения ivar.
self.mainViewController = aController;
эквивалентно:
[self setMainViewController:aController];
С другой стороны:
mainViewController = aController;
просто изменяет переменную экземпляра mainViewController
напрямую, пропуская любой дополнительный код, который может быть встроен в метод setMainViewController
UIApplication, например, освобождение старых объектов, сохранение новых, обновление внутренних переменных и т. Д.
В случае, когда вы обращаетесь к фрейму, вы все еще вызываете метод установки:
mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
расширяется до:
[[mainViewController view] setFrame:[[UIScreen mainScreen] applicationFrame]];
В идеале, для проверки вашего кода в будущем, вы также должны использовать self.mainViewController
(или [self mainViewController]
) при получении этого значения. В целом, классы гораздо реже содержат важный код в своих методах «получения», чем их «установщики», но все же возможно, что прямой доступ может что-то сломать в будущей версии Cocoa Touch.