我有一個啓動頁面,顯示在應用程序啓動時,我的客戶希望我在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。
任何想法?
如果你註釋掉''[self.window addSubview:launchImageView]'行,它是否仍然有524kb?你有沒有檢查確定'[self.window viewWithTag:121]'實際上是返回圖像視圖,而不是零由於某種原因? – Anomie 2011-04-23 22:26:20
如果您在模擬器的硬件菜單中執行「模擬內存警告」,內存是否會消失?我認爲UIKit可能會緩存它,以備將來使用,直到需要內存 – 2011-04-23 23:10:36
@Anomie如果我註釋掉那一行,我仍然有524kb,因爲即使我沒有將它添加到窗口,我仍然正在初始化它。如果我從設置字符串開始註釋掉整個部分,那麼524kb不再顯示obv。另外我打印出launchImageView的地址初始化後,並在viewWithTag和它指向相同的地址再次得到它之後? – HenryH 2011-04-23 23:20:30