【问题标题】:iOS Memory Management, UIWindow addSubview:, and tab controlleriOS 内存管理、UIWindow addSubview: 和选项卡控制器
【发布时间】:2011-06-30 14:49:23
【问题描述】:

当使用下面的代码时,你需要做些什么来释放标签控制器的视图吗?在开发应用程序时,我分析了该项目,它报告说有一个潜在的链接在线使用addSubview:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [window addSubview:[tabController view]];
    [window makeKeyAndVisible];
    return YES;
}

MyAppDelegate.h

@interface MyAppDelegate : AppDelegate {
    UIWindow *window;
    IBOutlet UITabBarController *tabController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabController;

@end

MyAppDelegate.m

@implementation MyAppDelegate

@synthesize tabController, window;

- (void)dealloc {
    [tabController release];
    [window release];
    [super dealloc];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [window addSubview:[tabController view]];
    [window makeKeyAndVisible];
    return YES;
}

@end

在发布tabController 之前,我是否需要先发布tabController.view?还是在application:didFinishLaunchingWithOptions: 方法内? This question 好像说我只需要在dealloc中释放控制器即可。

谢谢!

【问题讨论】:

    标签: objective-c ios memory-management


    【解决方案1】:

    从技术上讲,您应该在某个时候释放tabController,但实际上这并不重要。 window 存在于程序的整个生命周期中,当程序终止时,所有内存都会被清除,因此window 保留的对象不会泄漏。

    这会在您运行构建/构建和分析时引发警报,但可以放心地忽略它。这同样适用于在此级别添加的navController 或任何其他保留的主窗口子视图。

    【讨论】:

    • 谢谢。这“解决”了这个问题。现在有趣的是,我开始更好地理解分析消息,并发现它与作为子视图(用于背景)添加到 [tabController tabBar] 的 UIImageView 有关。但这仍然很好知道并回答了我的问题。
    【解决方案2】:

    你已经合成了,所以用 self 调用它

       - (void)dealloc {
    
          [self.tabController release];
    
          self.tabController=nil;
    
          [self.window release];
    
          self.window = nil;
    
    
       }
    

    【讨论】:

    • appdelegate 中你的窗口在哪里
    • 我已经更新了 UIWindow 是如何绑定的问题。谢谢!
    • 我希望你将窗口的 ib 连接到窗口变量
    • 是的,windowtabController 是通过 IB 连接的。
    猜你喜欢
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 2019-07-30
    • 2013-11-19
    相关资源
    最近更新 更多