Iphone 在ApplicationIDFinishLaunchingWithOptions中释放viewcontroller
我有一个基于导航的应用程序,我在app委托中的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
applicationdifinishlaunchingwithoptions
方法中发现了漏洞。我不确定在哪里释放viewController
头文件:
@class ViewController;
@interface AppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
ViewController *viewController;
}
@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) ViewController *viewController;
@end
在windowsaddSubview
行之后添加[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];