プロジェクトを anylayze すると、オブジェクトの潜在的なリークが大量に発生します。そのオブジェクトを解放しようとすると、「someobject send to deallocated instance」というエラーが発生します。
オブジェクトを解放する場所が完全に理解できませんでした。iOS 4.3 以上のバージョンをサポートする必要があります。Google を調べたところ、iOS 5 から ARC が有効になっていることがわかりました。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
ViewController *searchController=[[ViewController alloc]initWithNibName:@"ViewController_iPad" bundle:nil];
OptionsViewController *optionview=[[OptionsViewController alloc]initWithNibName:@"OptionsViewController~iPad" bundle:nil];
optionview.title=@"Options";
LogOut *logout=[[LogOut alloc]initWithNibName:@"LogOut~iPad" bundle:nil]; // method retains objective-c object with +1 retain count
logout.title=@"Sign Out";
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:searchController, optionview,logout, nil]; //Object leaked:object allocated and stored into logout is not referenced later in this execution path and has a retain count of +1
[self.window addSubview:tabBarController1.view]; [self.window makeKeyAndVisible];
CGRect rect = [[UIScreen mainScreen] bounds];
[self.window setFrame:rect];
return YES;
}
私が書くとき
[self.tabBarController release];
[searchController release];
[optionview release];
[logout release];
エラー
[self.window setFrame:rect];
が発生した後Bad Excess
オブジェクトを解放するタイミングがわかりませんでした。