2

UIStoryboardSegueクラスでは、プロパティはsourceViewController明らかにUIViewControllerです。Apple がこのプロパティを としてマークしたのはなぜidですか?

@property(nonatomic, readonly) id sourceViewController;
@property(nonatomic, readonly) id destinationViewController;

を使用した方が使いやすく、理解しやすいのではないでしょうかUIViewController *

@property(nonatomic, readonly) UIViewController *sourceViewController;
@property(nonatomic, readonly) UIViewController *destinationViewController;
4

1 に答える 1

0

Apple がここや他の多くの場所で id を使用する理由は、柔軟性を確保し、陳腐化を防ぐためです。

プロパティの名前にもかかわらず、destinationViewController常にUIViewControllerオブジェクトを返すとは限りません。より具体的には、Apple は、1 年後に、UIViewController. したがって、id を使用すると、陳腐化を防ぐことができます。

また、返されたオブジェクトを必ずしもにキャストしたくない場合があることにも注意してUIViewController.くださいUINavigationControllerUINavigationControllerは の子ですが、次のように、通常はプロパティUIViewController内からビュー コントローラーを取得する必要があるため、ほとんどの場合、そのようにキャストしたくありません。viewControllers

// unwrap the controller if it's embedded in the nav controller.
UIViewController *controller;
if ([segue.destinationViewController isKindOfClass:[UINavigationController class]]) 
{
    UINavigationController *navController = 
           (UINavigationController *)segue.destinationViewController;

    controller = [navController.viewControllers objectAtIndex:0];

 } else {

    controller = segue.destinationViewController;
}

したがって、この設計により、開発者は柔軟に対応できます。

于 2013-03-06T17:33:06.650 に答える