需要在AppDelegate中发布什么?

时间:2011-09-26 21:04:18

标签: ios delegates memory-leaks viewcontroller

我有一个使用Xcode的Single View Application模板创建的项目。显然,它附带了一个视图控制器和一个app委托文件。一切正常。我只想第一次使用Xcode的Analyze工具,确保在提交到App商店之前一切正常。我在app delegate中获得了以下代码行的潜在泄漏错误:

self.viewController = [[myViewController alloc] initWithNibName:@"myViewController"     bundle:nil]; 
self.window.rootViewController = self.viewController;

完整的app appate如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[myViewController alloc] initWithNibName:@"myViewController" bundle:nil]; 
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

我没有自己修改app委托。我正在使用模板给我的任何东西。我是否需要在应用代理中的某个位置发布内容?如果是这样,什么?以及app委托的方法?

2 个答案:

答案 0 :(得分:1)

由于应用程序正在终止,操作系统将恢复所有资源,因此无需在应用程序委托中发布任何内容。实际上,甚至可以称呼dealloc是不可能的。

有关详细信息,请参阅SO link

如果您需要在应用退出时进行清理,请使用applicationWillTerminate:

答案 1 :(得分:0)

这条线      self.viewController = [[myViewController alloc] ... 分配一个实例,然后将其分配给属性self.viewController。在alloc上,引用计数将为1,但是分配给设置为retain的属性将再次增加引用计数。

由于引用计数仅在dealloc中递减1,因此永远不会释放此对象=泄漏。

有关详细信息,请参阅iOS开发人员文档中有关Objective-C内存管理的部分。