关于释放我创建的对象

时间:2012-01-25 14:55:59

标签: iphone objective-c ios memory-management

我正在使用Xcode 4.2和最新的SDK开发iPhone和iPad应用程序。

我创建了一个不使用ARC的Tabbed应用程序,我在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

3 个答案:

答案 0 :(得分:4)

发送autorelease会导致稍后发送release消息。所以没有什么可担心的,他们会被释放。

答案 1 :(得分:3)

没有。它们将被发送自动发布,因此您不需要通过编码将它们发布。

答案 2 :(得分:0)

发送autorelease只需将它们添加到每个runLoop末尾耗尽的当前NSAutoreleasePool。因此,无需使用release另外发布它们。

提示:如果它是一个非常大的对象(或者很多对象,例如在循环中创建的),你真的想立即释放它以从内存释放它,为立即生效<调用释放/ strong>并减少内存占用。