我有一个使用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委托的方法?
答案 0 :(得分:1)
由于应用程序正在终止,操作系统将恢复所有资源,因此无需在应用程序委托中发布任何内容。实际上,甚至可以称呼dealloc是不可能的。
有关详细信息,请参阅SO link。
如果您需要在应用退出时进行清理,请使用applicationWillTerminate:
。
答案 1 :(得分:0)
这条线
self.viewController = [[myViewController alloc] ...
分配一个实例,然后将其分配给属性self.viewController
。在alloc上,引用计数将为1,但是分配给设置为retain
的属性将再次增加引用计数。
由于引用计数仅在dealloc中递减1,因此永远不会释放此对象=泄漏。
有关详细信息,请参阅iOS开发人员文档中有关Objective-C内存管理的部分。