Эта строка:
self.rootViewController = viewController
идентично этой строке:
[self setRootViewController:viewController];
Типичный вызов setX освобождает ранее сохраненное значение X и назначает новое сохраненное значение X.
id old = X;
X = [new retain];
[old release];
Но он может делать и все остальное.
Если вы знаете, что не существует текущего значения для освобождения (в init), и функция установки ничего не делает, кроме как сохраняет новое значение (синтезированное), вы можете заменить:
RootViewController *viewController = [[RootViewController alloc] init];
self.rootViewController = viewController; // self.rootViewController is a (nonatomic,retain) synthesized property
[viewController release];
С:
rootViewController = [[RootViewController alloc] init];
, который не использует self.
и поэтому непосредственно присваивает значение вместо вызова метода установки. Использование метода установки обычно является предпочтительным.
Чтобы объединить строки, как вы хотите, вы также можете переключиться на это:
self.rootViewController = [[[RootViewController alloc] init] autorelease];
Использует метод установки, освобождает выделенный экземпляр и помещается в одну строку.