2010-06-10 57 views
0

我只是好奇的關於以編程方式創建視圖控制器的正確方法。當我用靜態分析器編譯這段代碼時,我從alloc中得到一個泄漏(就像你期望的那樣)。我是否應該將它保留下來,直到應用程序退出爲止,或者有更清晰的方式?AppDelegate viewController內存泄漏?

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

    NSLog(@"UIApplication application:"); 
    RectViewController *myController = [[RectViewController alloc] init]; 
    [window addSubview:[myController view]]; 
    [window makeKeyAndVisible]; 
    return YES; 
} 

歡呼加里

回答

3

在這種情況下,保持你的視圖控制器的引用,在AppDelegate中的實例變量,並在AppDelegate中的dealloc方法將其釋放。

@interface AppDelegate : NSObject { 
    // ... 
    RectViewController *myController; 
} 

// ... 
@end 


@implementation AppDelegate 

// ... 

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

    NSLog(@"UIApplication application:"); 
    myController = [[RectViewController alloc] init]; 
    [window addSubview:[myController view]]; 
    [window makeKeyAndVisible]; 
    return YES; 
} 

- (void) dealloc { 
    // ... 
    [myController release]; 

    [super dealloc]; 
} 

// ... 

@end 
+0

謝謝Will,就是我之後的事情。 – fuzzygoat 2010-06-10 15:54:58

2

保持到視圖控制器的引用在您的應用程序委託(例如,房地產,綜合和釋放的dealloc)。

然後實例是這樣的:

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

    NSLog(@"UIApplication application:"); 

    RectViewController *rootControllerTemp = [RectViewController new]; 
    self.rootController = rootControllerTemp; 
    [rootControllerTemp release]; 

    [window addSubview:[self.rootController view]]; 

    [window makeKeyAndVisible]; 

    return YES; 
} 
+1

輸入相同的東西!打我吧! LOL – slf 2010-06-10 15:43:27

+0

謝謝,非常感謝邁克爾。 – fuzzygoat 2010-06-10 15:54:19