Это не имеет ничего общего с вашим изображением, это связано с тем, как создаются UINavigationControllers.
Вот ваш код (с некоторыми добавленными комментариями):
// Create the view controller
Login *loginViewController = [[Login alloc] initWithNibName:nil bundle:nil];
// Create a navigation controller and add it
UINavigationController *navCntrl1 = [[UINavigationController alloc] initWithRootViewController:loginViewController];
viewDidLoad
- этоВызов в первый раз, когда пользователь должен знать о представлении вашего контроллера представления.Если ваш метод viewDidLoad
хочет отредактировать функцию контроллера навигации, тогда _your view контроллер должен быть добавлен в контроллер навигации перед вызовом viewDidLoad`.
В вашем первом примере, viewDidLoad
был вызван, когдаВы добавили свой контроллер вида в контроллер навигации (вторая строка выше).
Во втором примере viewDidLoad
был вызван, когда вы сказали self.view
в методе initWithNibNamed:bundle:
.Важно, что это до того, как ваш контроллер представления узнает, что он будет добавлен в контроллер навигации .Поэтому, когда вы говорите self.navigationController
, он не будет знать, о каком контроллере навигации вы говорите.Он не может установить оттенок чего-то, о чем еще не знает!
В первом примере viewDidLoad
называется после , когда вы добавили свой контроллер вида в контроллер навигациипоэтому, когда вы говорите self.navigationController
, он знает, о каком контроллере навигации вы говорите, и может соответствующим образом установить оттенок.
Чтобы проверить это самостоятельно, введите NSLog(@"%@", self.navigationController);
в свой метод viewDidLoad
- держу пари, он выводит nil
для второго примера;)
К вашему сведению:
В любом случае вы всегда должны делать первый пример - он будет создавать изображение только тогда, когда это необходимои позволит вам выгрузить изображение в случае нехватки памяти.