2010-07-14 40 views
0

我不明白爲什麼這段代碼被標記爲具有內存泄漏:爲什麼儀器在UIColor和NSArray上標記內存泄漏?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    MenuViewController *menuView = [[MenuViewController alloc] initWithNibName:@"MenuView" bundle:[NSBundle mainBundle]]; 
    navigationController = [[UINavigationController alloc] initWithRootViewController:menuView]; 
    navigationController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"livreto-verso-horizontal.png"]]; // memory leak here 47,1% 
    [menuView release]; 
    BilheteViewController *rightView = [[BilheteViewController alloc] initWithNibName:@"BilheteView" bundle: [NSBundle mainBundle]]; 
    spliViewController.viewControllers = [NSArray arrayWithObjects:navigationController, rightView, nil]; // memory leak here 52,9% 
    [window addSubview:spliViewController.view]; 

    [window makeKeyAndVisible]; 

    [rightView release]; 

    return YES; 
} 

就行標有問題:

navigationController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"livreto-verso-horizontal.png"]] 

spliViewController.viewControllers = [NSArray arrayWithObjects:navigationController, rightView, nil]; 

我如何解決這個泄漏?

更新1

應用程序委託的dealloc方法,既navigationController和spliViewController被釋放:

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

回答

1

泄漏工具顯示泄漏的東西被分配。

所以它的意思是,在你分配這些值後,它們從未被釋放 - 這似乎意味着你的導航控制器在它應該被釋放時不會被釋放。

+0

我已經用釋放我的導航控制器的dealloc方法更新了這個問題。我不認爲這是錯的。你做? – 2010-07-15 13:01:16

+0

由於您正在應用程序委託中設置該視圖,所以不應調用dealloc。 通常情況下,您絕不會在視圖控制器中釋放導航控制器。 – 2010-07-15 22:39:33

+0

嗨肯德爾,那麼我應該用什麼方法來釋放應用程序委託上的控制器? applicationWillFinish? – 2010-07-16 11:08:57

0

是否有可能你看到泄漏的對象的唯一引用在其他對象哪些也泄漏?

例如,可以分配一個導航控制器這裏:

navigationController = [[UINavigationController alloc] initWithRootViewController:menuView]; 

的的UIColor將由navigationController時將其分配到的backgroundColor被保留。

您是否在某處釋放對該navigationController的引用?

+0

是的,導航控制器是在我的應用程序代理的dealloc方法上發佈的(它分配的是同一個類)。 – 2010-07-15 12:56:51

+0

有沒有其他地方你分配給navigationController?我認爲你可能需要發佈更多的代碼。有沒有其他物體泄漏? – JosephH 2010-07-15 16:57:27