Iphone 关于释放由我创建的对象

Iphone 关于释放由我创建的对象,iphone,objective-c,ios,memory-management,Iphone,Objective C,Ios,Memory Management,我正在用Xcode 4.2和最新的SDK开发一个iPhone和iPad应用程序 我在没有使用ARC的情况下创建了一个选项卡式应用程序,我在AppDelegate上发现了这一点: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame

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

我在没有使用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

发送
自动释放
将导致稍后发送
释放
消息。因此,无需担心,它们将被发布。

否。它们将被发送自动释放,因此它们不需要通过您编码来发布

Sending
autorelease
只需将它们添加到当前的
NSAutoreleasePool
,该池在每个运行循环结束时被排空。因此,无需使用
release
额外释放它们


提示:如果它是一个非常大的对象(或许多对象,例如在循环中创建的对象),您确实希望立即释放以将其从内存中释放,请调用release以获得即时效果并减少内存占用。

否,因为它们是发送给视图控制器的
autorelease
消息。其他人提到了您发送给视图控制器的
autorelease
。另一件值得一提的事情是,尽管
arrayWithObjects
保留了它的内容,但它本身是以自动删除状态返回的,因此
tabBar
的retain将是唯一防止它被破坏的方法。释放视图控制器的方式如下:tabBarController->NSArray of its controllers->your view controllers。