2011-04-23 61 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