0

私は現在、splitViewController のビューが互いに通信しなければならない RSS プログラムを作成しています。どちらも現在、以下で説明するように 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];

/ ---------------------------------------------- /

    //[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;
}
4

1 に答える 1

0

あなたの質問を正しく理解していれば、これを行うことができますが、それが真の循環参照であり、両方のプロパティが「強い」場合、それらが決して解放されない状況になる可能性があります。そのため、オブジェクトへの後方参照がある場合は、「弱い」を使用して、保持カウントをインクリメントせず、破棄する必要があるときに保持しないようにします。

于 2012-11-20T23:58:28.637 に答える