我很好奇,如果有一个很好的理由,我应该/不应该在下面的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