【问题标题】:Is it bad to set two Views in a SplitView to hold a reference to each other?在 SplitView 中设置两个 View 以保持对彼此的引用是不是很糟糕?
【发布时间】:2012-11-20 23:36:39
【问题描述】:

我目前正在编写一个 RSS 程序,其中我的 splitViewController 的视图必须相互通信。它们目前都持有彼此的属性实例,如下所述,在 App Delegate 中声明。我想知道这是否是不好的编程习惯,如果是,我应该怎么做才能避免它?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    FCListViewController *lvc = [[FCListViewController alloc]initWithStyle:UITableViewStylePlain];
    UINavigationController *masterNav = [[UINavigationController alloc] initWithRootViewController:lvc];



    FCContentViewController *cvc = [[FCContentViewController alloc] init];

/*----------------------------------------- */ //<---------My question lies here

    [lvc setContentViewController:cvc];
    [cvc setListViewController:lvc];

/------------------------------------------ em>/

    //[lvc setWebViewController:wvc];

    //[[lvc navigationItem]setTitle:@"Falcon RSS Feed"];

   // [[self window] setRootViewController:masterNav];

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        UINavigationController *detailNav = [[UINavigationController alloc] initWithRootViewController:cvc];
        NSArray *vcs = [NSArray arrayWithObjects:masterNav, detailNav, nil];
        UISplitViewController *svc = [[UISplitViewController alloc] init];


        [svc setDelegate:cvc];
        [svc setViewControllers:vcs];

        [[self window]setRootViewController:svc];
          [[svc view] setBackgroundColor:[UIColor clearColor]]; //eliminates annoying black background for the listViewController when rotated

    }
    else{
        [[self window] setRootViewController:masterNav];
    }

    UIColor *blueHue = [UIColor colorWithRed:.2 green:.3 blue:.5 alpha:.7];
    self.window.backgroundColor = blueHue; //Sets upper most background.. noticed when rotating
    [self.window makeKeyAndVisible];
    return YES;
}

【问题讨论】:

    标签: ios memory-management uisplitviewcontroller retain-cycle strong-references


    【解决方案1】:

    如果我正确理解您的问题,您可以这样做,但如果它是一个真正的循环引用并且两个属性都“强”,那么您可能会遇到永远不会释放它们的情况。因此,如果你有一个对象的反向引用,那么你想使用“弱”,这样它就不会增加保留计数并在它应该被销毁时保持它。

    【讨论】:

    • 嗯,这实际上是我认为我应该做的......所以我确实宣布其中一个是弱者。我不确定这是否是个问题,因为它们是“主要”观点。我不希望我的主要观点之一意外发布,哈哈。我的另一个思考过程是它们是我的“主要”观点......那么有一个可能的保留周期真的有问题吗?我只是想确保这在编码员的道德书中是可以的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2011-10-06
    • 2018-01-20
    • 2022-01-24
    相关资源
    最近更新 更多