Использование __kindof
означает, что в этом случае компилятор может предположить, что selectedViewController
будет иметь тип UIViewController
или любой подкласс, имеющий в своей иерархии UIViewController
.
popToRootViewController
- это метод UINavigationController
.Поскольку UINavigationController
является подклассом UIViewController
, компилятор говорит:
Хорошо, я собираюсь предположить, что вы знаете, что делаете, и позвольте вам вызвать метод, от которого я знаю, чтоподкласс UIViewController.
Это похоже на использование приведения:
UIViewController *selectedViewController;
[(UINavigationController *)selectedViewController popToRootViewControllerAnimated:YES];
Вы говорите компилятору доверять вам.
Но, конечно,в обоих случаях, если во время выполнения переменная на самом деле не является UINavigationController
, то код завершится сбоем во время выполнения.