代码之家  ›  专栏  ›  技术社区  ›  fuzzygoat

设置uinavigationcontroller,旧代码?

  •  0
  • fuzzygoat  · 技术社区  · 15 年前

    从我第一次开始学习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;
    }   
    

    只是好奇…

    加里

    1 回复  |  直到 14 年前
        1
  •  1
  •   FreeAsInBeer Jeff    14 年前

    是的,你的第二个代码肯定比第一个好。但是,我会改变一些事情。跳过tempcontroller,而是使用点表示法将其直接分配给navcontroller。一定要打电话 [navController release] 在里面 dealloc 不过。

    - (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;
    }