2010-12-21 6 views
0

Ich habe die folgenden Delegatendateien. Mein AboutViewController in MainWindow.xib lädt die AboutViewController.xib und die AboutViewController Outlet ist damit verbunden. Außerdem wird navController von einer anderen ViewController.xib geladen. Die Ansicht von AboutViewController wird beim Start angezeigt und nach einer Sekunde entfernt. Daher lasse ich den View-Controller los, indem ich den ivar auf Null setze.eine Ansicht in App-Delegat entladen

Da der About-View-Controller automatisch von XCode geladen wird, mache ich etwas falsches (undichte Speicher usw.), indem ich ihn manuell auf Null setze? warum oder warum nicht?

Dank

- MyProjAppDelegate.h

#import <UIKit/UIKit.h> 
@interface MyProjAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
    UIViewController *aboutViewController; 
    UINavigationController *navController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UIViewController *aboutViewController; 
@property (nonatomic, retain) IBOutlet UINavigationController *navController; 
@end 

- MyProjAppDelegate.m

#import "MyProjAppDelegate.h" 
#import "AboutViewController.h" 

@implementation MyProjAppDelegate 
@synthesize window; 
@synthesize aboutViewController; 
@synthesize navController; 

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    [window addSubview:aboutViewController.view]; 
    [window makeKeyAndVisible]; 

    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showMainView) userInfo:nil repeats:NO]; 
} 

-(void)showMainView { 
    [aboutViewController.view removeFromSuperview]; 
    self.aboutViewController = nil; 

    [window addSubview:navController.view]; 
} 

- (void)dealloc { 
    [navController release]; 
    [aboutViewController release]; 
    [window release]; 
    [super dealloc]; 
} 
@end 

Antwort

2

Da die über View-Controller von XCode automatisch geladen wird, bin ich etwas falsch machen (lea König Speicher usw.), indem ich ihn manuell auf Null setze?

Nein, Sie tun nichts falsch, weil Sie die Eigenschaft Accessor-Methode (self.aboutViewController) verwenden es zu nil zu setzen; Der Accessor wird sich um die release kümmern. (Und, Sie entfernen es korrekt aus der Superview vor Freigabe :-)

+0

ok, also wenn ich von der Speicherverwaltung Aspekt denke, bin ich nicht der Besitzer des AboutViewController, wie ich es selbst nicht so erstellen Ich sollte es nicht veröffentlichen, oder vielleicht bin ich der Besitzer, weil XCode * es für mich erstellt (an Stelle von mir) * damit ich es freigeben könnte, ist das richtig? – lockedscope

+0

Ja, das stimmt. –