我很好奇,如果有一個很好的理由,我應該/不應該在下面的tabBarController中使用@synthesize,或者沒有關係?@synthesize與UITabBarController?
@implementation ScramAppDelegate
@synthesize window;
@synthesize tabBarController;
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self setTabBarController:[[UITabBarController alloc] init]];
[window addSubview:[tabBarController view]];
[window makeKeyAndVisible];
return YES;
}
-(void)dealloc {
[tabBarController release];
[self setTabBarController: nil];
[window release];
[super dealloc];
}
OR
@implementation ScramAppDelegate
@synthesize window;
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
tabBarController = [[UITabBarController alloc] init];
[window addSubview:[tabBarController view]];
[window makeKeyAndVisible];
return YES;
}
-(void)dealloc {
[tabBarController release];
[window release];
[super dealloc];
}
歡呼加里
我一直在想內存泄漏,這就是爲什麼我做了[tabBarController release];和[self setTabBarController:nil];在dealloc中。通過我的思維方式,導致正確的內存管理,雖然它稍微有些學術性,但dealloc從不會被調用,因爲應用程序在退出時可以釋放所有內存。 – fuzzygoat 2010-05-30 19:25:12
問題在於你已經保留了兩次('alloc'遞增了保留計數,然後你的屬性被設置爲'retain',所以生成的setter會再次增加這個計數),所以如果你'重新釋放一次,然後將其設置爲零,您將創建一個內存泄漏。 – 2010-05-30 19:43:55
所以保留計數是2,在釋放它的1之後,設置nil之後它再次釋放(現在它的0)並且保留nil? – fuzzygoat 2010-05-30 19:55:43