2011-04-23 56 views
0

我有一個啓動頁面,顯示在應用程序啓動時,我的客戶希望我在x時間內保持可見狀態。一切都很好,除非圖像從未發佈?爲什麼此ImageView未被釋放?

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

    NSString *fileLocation = [[NSBundle mainBundle] pathForResource:@"splash_page" ofType:@"png"]; 

    NSData *imageData = [[NSData alloc] initWithContentsOfFile:fileLocation]; 
    UIImage *launchImage = [[UIImage alloc] initWithData:imageData]; 
    [imageData release], imageData = nil; 

    UIImageView *launchImageView = [[UIImageView alloc] initWithImage:launchImage]; 
    launchImageView.frame = CGRectMake(0, 
     0, 
     [[UIScreen mainScreen] bounds].size.width , 
     [[UIScreen mainScreen] bounds].size.height); 
    launchImageView.tag = 121; 
    [launchImage release], launchImage = nil; 

    [self.window addSubview:launchImageView]; 
    [launchImageView release], launchImage = nil; 

    [self.window makeKeyAndVisible];  
    [self performSelector:@selector(initApp) withObject:nil afterDelay:kInitDelay]; 

    return YES; 
} 

- (void)initApp 
{ 
    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 

    UIImageView *launchImageView = (UIImageView*)[self.window viewWithTag:121]; 
    [launchImageView removeFromSuperview]; 

    RootNavController *navController = [[RootNavController alloc] initRootController]; 
    self.rootNavController = navController; 
    [self.window addSubview:navController.view]; 
    [navController release], navController = nil; 
} 

這是我的理解是removeFromSuperview呼籲視圖所以這應該被釋放但我仍然可以看到在Intruments 524KB的malloc的發佈對象分配的工具,我確定是圖像。負責任的圖書館= libRIP.A.dylib和負責的調用者ripl_Create。

如果我註釋掉啓動頁面代碼並直接啓動NavController,我沒有那524kb。

任何想法?

+0

如果你註釋掉''[self.window addSubview:launchImageView]'行,它是否仍然有524kb?你有沒有檢查確定'[self.window viewWithTag:121]'實際上是返回圖像視圖,而不是零由於某種原因? – Anomie 2011-04-23 22:26:20

+0

如果您在模擬器的硬件菜單中執行「模擬內存警告」,內存是否會消失?我認爲UIKit可能會緩存它,以備將來使用,直到需要內存 – 2011-04-23 23:10:36

+0

@Anomie如果我註釋掉那一行,我仍然有524kb,因爲即使我沒有將它添加到窗口,我仍然正在初始化它。如果我從設置字符串開始註釋掉整個部分,那麼524kb不再顯示obv。另外我打印出launchImageView的地址初始化後,並在viewWithTag和它指向相同的地址再次得到它之後? – HenryH 2011-04-23 23:20:30

回答

-1

爲什麼不使用Default.png作爲你的啓動畫面?將你的「Splash_page.png」重命名爲「Default.png」將自動顯示負載上的啓動頁面,然後將UIImageView(使用Default.png)添加到MainWindow,並在x時間後啓動rootViewController。

+0

這正是他*所做的。看看發佈的代碼。 – Anomie 2011-04-23 22:10:07