Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在ApplicationIDFinishLaunchingWithOptions中释放viewcontroller_Iphone_Objective C_Memory Leaks - Fatal编程技术网

Iphone 在ApplicationIDFinishLaunchingWithOptions中释放viewcontroller

Iphone 在ApplicationIDFinishLaunchingWithOptions中释放viewcontroller,iphone,objective-c,memory-leaks,Iphone,Objective C,Memory Leaks,我有一个基于导航的应用程序,我在app委托中的applicationdifinishlaunchingwithoptions方法中发现了漏洞。我不确定在哪里释放viewController 头文件: @class ViewController; @interface AppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; ViewController *viewController; } @prope

我有一个基于导航的应用程序,我在app委托中的
applicationdifinishlaunchingwithoptions
方法中发现了漏洞。我不确定在哪里释放
viewController

头文件:

@class ViewController;
@interface AppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
ViewController *viewController;
  }
 @property (nonatomic, retain)  UIWindow *window;
 @property (nonatomic, retain)  ViewController *viewController;
 @end
在windows
addSubview
行之后添加
[nvc release]
会使我的
viewcontroller
消失。将
autorelease
添加到
alloc
行会冻结应用程序,并且无法重定向到下一个视图。我想在将应用提交到应用商店之前修复所有漏洞。有人能告诉我释放
rootViewController
的正确位置吗


谢谢。

我可能错了,但我相信通常情况下,rootviewcontroller与委托类似,这意味着在应用程序关闭之前,它不会被释放。然而,要回答您的问题,发布大多数内容的合适位置是dealloc方法(如果没有,只需添加它,它将被调用)

发帖说和我一样的话:


找不到官方链接,但我很确定我是对的

您可以将导航控制器保留在应用程序代理的@属性中,而不是viewcontroller。因此,这将起作用:

Header file:

#import <UIKit/UIKit.h>

@interface AppDelegate : NSObject <UIApplicationDelegate> {

   UIWindow *window;
   UINavigationController *navController;
  }
  // if using current compiler, just omit these ivars above

 @property (nonatomic, retain)  UIWindow *window;
 @property (nonatomic, retain)  UINavigationController *navController;

 @end
而不是:

[window addSubview:[nvc view]];
当然,创建导航控制器会变成:

self.navController = [[[UINavigationController alloc] initWithRootViewController:viewController] autorelease];
[viewController release];

假设您之前刚刚创建了“viewcontroller”(您没有显示出来)

请不要炒我鱿鱼,我知道即使是“most”这个词也很危险,因为有很多时间可以在其他地方发布。我只是说,对于初学objective c的人来说,这是一个标准,我正在用dealloc方法发布viewController。我想释放nvc(navigationViewController),我正在应用程序IDFinishLaunchingWithOptions方法中初始化。您的导航控制器是否在主窗口上,并在代理中设置?您的问题明确表示“释放rootviewcontroller”,而不是nvc。但是不管怎样,你的nvc声明在哪里(我在上面的代码中看到了它,但我不知道它在哪个文件中)是的。我已经在代理中设置了它。在nvc的代码中,我有一个带有按钮的菜单等。正如我在帖子中所说,代表和代表成员永远不会被释放,他们在整个程序中都是开放的。让我试着找到一个指向文档的链接,这些文档说明了这一点
self.window.rootViewController = self.navController;
[window addSubview:[nvc view]];
self.navController = [[[UINavigationController alloc] initWithRootViewController:viewController] autorelease];
[viewController release];