Iphone 设置UINavigationController,旧代码?
我一直在回顾我第一次开始学习Objective-c时的一些旧代码,我有一个快速的问题:Iphone 设置UINavigationController,旧代码?,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我一直在回顾我第一次开始学习Objective-c时的一些旧代码,我有一个快速的问题: // THIS IS MY OLD CODE @implementation syntax_UINavAppDelegate @synthesize window; @synthesize navController; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)l
// THIS IS MY OLD CODE
@implementation syntax_UINavAppDelegate
@synthesize window;
@synthesize navController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UITableViewController *rootController = [[UITableViewController alloc] init];
navController = [[UINavigationController alloc] initWithRootViewController:rootController];
[window addSubview:[[self navController] view]];
[window makeKeyAndVisible];
return YES;
}
我目前的理解是,在上述代码中有两个问题,第一个问题是我直接访问属性navController(我应该使用setter),第二个问题是我是否有[UINavigationController alloc]
的内存泄漏?我的直觉是,它不会泄漏,因为当我调用[navController release]时,它会被释放代码>在dealloc中,但这只是一种混乱和糟糕的做事方式。下面是我(现在我知道多一点)对相同代码的返工
// NEW CODE
@implementation syntax_UINavAppDelegate
@synthesize window;
@synthesize navController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UITableViewController *rootController = [[UITableViewController alloc] init];
UINavigationController *tempController = [[UINavigationController alloc] initWithRootViewController:rootController];
[self setNavController:tempController];
[rootController release];
[tempController release];
[window addSubview:[[self navController] view]];
[window makeKeyAndVisible];
return YES;
}
只是好奇
Gary是的,你的第二个代码肯定比第一个好。然而,我会改变一些事情。跳过tempcontroller,而是使用点符号将其直接分配给navController。不过,请确保在dealloc
中调用[navController release]
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UITableViewController *rootController = [[UITableViewController alloc] init];
[self.navController = [[[UINavigationController alloc]
initWithRootViewController:rootController] autorelease];
[rootController release];
[window addSubview:self.navController.view];
[window makeKeyAndVisible];
return YES;
}
我想说的是,你的理解是正确的,你的直觉在大多数情况下可能是正确的。我通常会将[tempController view]传递给addSubview方法,以避免调用getter,并在返回之前在“大”清理块上释放所有局部变量,但实际上是一样的。非常感谢,我个人更喜欢自己释放alloc,然后让dealloc释放属性中的retain(但这只是我的偏好)谢谢你抽出时间来发帖,非常感谢。