2012-01-25 4 views
0

Я разрабатываю приложение для iPhone и iPad с Xcode 4.2 и последним SDK.О выпуске созданных мной объектов

Я создал вкладки приложения без использования ARC, и я нашел это на AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
    // Override point for customization after application launch. 
    UIViewController *viewController1, *viewController2; 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease]; 
     viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease]; 
    } else { 
     viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPad" bundle:nil] autorelease]; 
     viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPad" bundle:nil] autorelease]; 
    } 
    self.tabBarController = [[[UITabBarController alloc] init] autorelease]; 
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil]; 
    self.window.rootViewController = self.tabBarController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

Может мне нужно освободить viewController1 и viewController2?

+2

нет, потому что отправлен сообщение 'autorelease'. –

+0

Другие упомянули 'autorelease', которые вы отправили своим контроллерам. Еще одна вещь, о которой стоит упомянуть, заключается в том, что, хотя 'arrayWithObjects' сохраняет свой контент, он возвращается в самореализованном состоянии, поэтому сохранение tabBar будет единственным, что удерживает его от разрушения. То, как ваши контроллеры будут освобождены, выглядит следующим образом: tabBarController -> NSArray своих контроллеров -> ваши контроллеры просмотров. – dasblinkenlight

ответ

4

Отправка autorelease приведет к отправке сообщения release. Поэтому не о чем беспокоиться, они будут выпущены.

3

Нет, они будут отправлены autorelease, поэтому они не должны быть освобождены вы кодированием его.

0

Отправки autorelease просто добавить их к текущим NSAutoreleasePool который осушенный в конце каждого runLoop. Поэтому нет необходимости дополнительно выпускать их, используя release.

Совет: если это очень большой объект (или множество объектов, например, созданные в цикле), вы действительно хотите, чтобы освободить немедленно dealloc его из памяти, вызовите релиз для немедленного эффекта и уменьшения объема памяти.

Смежные вопросы