<原>@Selector应用-不是对应的class却能调用其class方法

定义两个controller

FirstViewController   SecondViewController

分别为各自定义一个方法  比如  -(void)first;

-(void)second;

在RootViewController中  定义一个属性

@property(nonatomic,retain)UIViewController *currentViewController

@synthesize currentViewController;

用来存放当前的congtroller的实例   由于我门并不知道  当前是哪一个controller的实例  所以

对该属性的定义只能是 通类 UIViewController

假如我们设定当前是first

self.currentViewController=firstViewController;

currentViewController的class是UIViewController   firstViewController 的 class是FirstViewController 但是其父类

是UIViewController  所以上面的 赋值语句 没有问题

但是 我们要是想调用firstViewController中的first方法  

[self.currentViewController first]

是行不通的  currentViewController的class是UIViewController    而UIViewController 中并没有这个方法

我们可以通过下面的方法解决

if([self.currentViewController iskindofclass:[FirstViewController class]])

{

  FirstViewController *tempController=(FirstViewController *)self.currenViewController;

  [tempController First];

}

下面介绍一种更佳简单的方法

[self.currentViewController performSelector:@selector(first)];

这个例子只是简单的讲了一下这个方法的作用  如果  此时不光有first  second两个 controller  而是有多个  那么这个方法的优势会非常明显

原文地址:https://www.cnblogs.com/bucengyongyou/p/2682508.html