我正在使用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 ?
答案 0 :(得分:4)
发送autorelease
会导致稍后发送release
消息。所以没有什么可担心的,他们会被释放。
答案 1 :(得分:3)
没有。它们将被发送自动发布,因此您不需要通过编码将它们发布。
答案 2 :(得分:0)
发送autorelease
只需将它们添加到每个runLoop末尾耗尽的当前NSAutoreleasePool
。因此,无需使用release
另外发布它们。
提示:如果它是一个非常大的对象(或者很多对象,例如在循环中创建的),你真的想立即释放它以从内存释放它,为立即生效<调用释放/ strong>并减少内存占用。