【问题标题】:What needs to be released in the AppDelegate?AppDelegate 中需要发布什么?
【发布时间】:2011-09-26 21:04:18
【问题描述】:

我有一个使用 Xcode 的单视图应用程序模板创建的项目。显然,它带有一个视图控制器和一个应用程序委托文件。一切正常。我只是想第一次使用 Xcode 的分析工具,以确保在提交到 App Store 之前一切正常。我在应用程序委托中收到以下代码行的潜在泄漏错误:

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

完整的应用委托如下:

- (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;
}

我没有自己修改应用委托。我正在使用模板给我的任何东西。我需要在应用程序委托的某个地方发布一些东西吗?如果是这样,是什么?以及应用委托的哪种方法?

【问题讨论】:

    标签: ios delegates memory-leaks viewcontroller


    【解决方案1】:

    应用程序委托中不需要释放任何内容,因为应用程序正在终止并且操作系统将恢复所有资源。事实上,甚至不可能调用 dealloc。

    更多信息请参见SO link

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

    【讨论】:

    • 非常感谢 CocoaFu!我想我应该忽略分析工具抱怨的内容,至少在这种情况下是这样。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我了解内存管理的基础知识。只是不知道在这种情况下是否需要做点什么。我会相信另一个说我不需要在这里做任何事情的答案。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    相关资源
    最近更新 更多