2012-01-25 5 views
0

Xcode 4.2および最新のSDKを使用してiPhoneおよびiPadアプリケーションを開発しています。私が作成したオブジェクトを解放することについて

私はARCを使用せずにタブ付きのアプリケーションを作成していると私はAppDelegateでこれを見つけた:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
    // Override point for customization after application launch. 
    UIViewController *viewController1, *viewController2; 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease]; 
     viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease]; 
    } else { 
     viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPad" bundle:nil] autorelease]; 
     viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPad" bundle:nil] autorelease]; 
    } 
    self.tabBarController = [[[UITabBarController alloc] init] autorelease]; 
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil]; 
    self.window.rootViewController = self.tabBarController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

は私がviewController1、およびviewController2を解放する必要があるかもしれませんか?

+2

いいえ、「autorelease」メッセージが送信されるためです。 –

+0

他の人は、あなたのView Controllerに送った 'autorelease'について言及しています。言及する価値のある別のものは、 'arrayWithObjects'はその内容を保持しますが、それはautoreleased状態で返されるため、' tabBar'のretainは破壊から守る唯一のものです。あなたのビューコントローラがリリースされる方法は、次のとおりです:tabBarController - >そのコントローラのNSArray - >ビューコントローラ。 – dasblinkenlight

答えて

4

を送信すると、後でreleaseメッセージが送信されます。だから心配することは何もなく、彼らは解放されるでしょう。

3

号は、彼らは、自動解放が送信されますので、彼らはあなたがそれをコーディングすることによって解放する必要はありません。

0

だけで、各実行ループの最後に排出され、現在のNSAutoreleasePoolに追加autoreleaseを送信します。したがって、releaseを使用してそれらをさらに解放する必要はありません。

ヒント:それはだ場合、非常に大きなオブジェクト(またはループで作成された例えば多くのオブジェクト)あなたが本当に即効とメモリフットプリントを削減するためにリリースを呼び出し、メモリからそれをDEALLOCするために、すぐにリリースしたいです。

関連する問題