【问题标题】:PushViewController: Is this a memory leak?PushViewController:这是内存泄漏吗?
【发布时间】:2011-12-30 08:14:36
【问题描述】:

我正在使用最新的 SDK 和 XCode 4.2 开发 iOS 4(我使用 ARC)。

我正在以编程方式开发导航控制器,但我有一个问题。

这是 AppDelegate.h

#import <UIKit/UIKit.h>

@class ViewController;
@class SecondViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    UINavigationController* navController;
    ViewController* viewController;
    SecondViewController* secondViewController;
}

@property (strong, nonatomic) UIWindow *window;

- (void) showSecondViewController;

@end

这是 AppDelegate.m

    #import "AppDelegate.h"

    #import "ViewController.h"
    #import "SecondViewController.h"

    @implementation AppDelegate

    @synthesize window = _window;

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

        viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
        viewController.title = @"Menu";
        navController = [[UINavigationController alloc] initWithRootViewController:viewController];
        navController.navigationBar.tintColor = [UIColor blackColor];
        self.window.rootViewController = navController;

        [self.window makeKeyAndVisible];
        return YES;
    }

- (void) dealloc
{
   [_window release];
   [viewController release];
   [navController release];
   [secondViewController release];
}
    - (void)applicationWillResignActive:(UIApplication *)application
    {
        ...
    }

    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
        ...
    }

    - (void)applicationWillEnterForeground:(UIApplication *)application
    {
        ...
    }

    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
        ...
    }

    - (void)applicationWillTerminate:(UIApplication *)application
    {
        ...
    }

    - (void) showSecondViewController
    {
        secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
        secondViewController.title = @"Second";
        [navController pushViewController:secondViewController animated:YES];
    }

我的问题是关于最后一种方法,-(void)showSecondViewController;

我可以在最后添加这一行吗?

[secondViewController release]

我已经分析了应用程序,但没有发现任何内存泄漏。但我必须在这里问它,因为我不确定。

【问题讨论】:

    标签: iphone objective-c ios memory-leaks


    【解决方案1】:

    如果再次调用showSecondViewController 方法,将会发生内存泄漏。

    您应该在showSecondViewController 方法中释放secondViewController

    - (void) showSecondViewController
    {
        secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
        secondViewController.title = @"Second";
        [navController pushViewController:secondViewController animated:YES];
        [secondViewController release]
    }
    

    当你做pushViewController:secondViewController时,它会被navController自动保留

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-20
      • 2013-08-12
      • 2011-02-01
      • 1970-01-01
      • 2013-01-08
      • 2013-11-12
      相关资源
      最近更新 更多