Да, у вас есть утечка памяти. Это можно исправить следующим образом:
self.homeViewController = [[[HomeViewController alloc]init] autorelease];
Синтезирование свойства, которое сохраняется, создает установщик, который действует следующим образом:
- (void)setHomeViewController(HomeViewController *)aHomeViewController
{
if (![homeViewController isEqual:aHomeViewController]) {
[homeViewController release];
homeViewController = aHomeViewController;
[homeViewController retain];
}
}
Синтезированный установщик освобождает старое значение свойства и сохраняет новое значение. Таким образом, ваша переменная alloc'а сохраняется дважды: в alloc & в установщике свойств. Затем он освобождается только один раз, в сделке.
Примечание. Я исправил приведенный выше код в соответствии с комментариями jv42 и JeremyP. Синтезированный установщик сначала эффективно проверяет, что новое значение и старое значение не указывают на один и тот же объект. Без проверки этого (как у меня было изначально) он может освободить объект HomeViewController и потерять его перед установкой свойства.