Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 设置UINavigationController,旧代码?_Iphone_Objective C_Cocoa Touch - Fatal编程技术网

Iphone 设置UINavigationController,旧代码?

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

我一直在回顾我第一次开始学习Objective-c时的一些旧代码,我有一个快速的问题:

// 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(但这只是我的偏好)谢谢你抽出时间来发帖,非常感谢。