1)判断实例对象能否调用指定的方法
- (BOOL)respondsToSelector:(SEL)aSelector
格式:对象 respondsToSelector:(SEL)
2)判断类能否响应指定的方法
(BOOL)instancesRespondToSelector:(SEL)aSelector
格式 类 instancesRespondToSelector:(SEL)
3)调用指定方法
1、调用不带参数的方法
Animal *ani = [Animal new];
[ani performSelector:@selector(run)];
2、调用带参数的方法- #import <Foundation/Foundation.h>
- #import "Dog.h"
- int main(int argc, const char * argv[]) {
- @autoreleasepool {
- //动态类型检测的第二部分
- //1、方法响应的检测
- Animal *ani = [Animal new];
- //1)判断实例对象能否调用指定的方法
- //- (BOOL)respondsToSelector:(SEL)aSelector
- //格式:对象 respondsToSelector:(SEL)
- SEL s1 = @selector(eat);//把eat包装成SEL类型
- BOOL isRespond = [ani respondsToSelector:s1];
- if (isRespond) {
- [(Dog*)ani eat];
- }
- else
- {
- NSLog(@"error");
- }
- //2)判断类能否响应指定的方法
- //(BOOL)instancesRespondToSelector:(SEL)aSelector
- //格式 类 instancesRespondToSelector:(SEL)
- isRespond = [Dog instancesRespondToSelector:s1];
- NSLog(@"%d",isRespond);
- isRespond = [Animal instancesRespondToSelector:s1];
- NSLog(@"%d",isRespond);
-
- // @try {
- // [(Dog*)ani eat];
- // }
- // @catch (NSException *exception) {
- // NSLog(@"error");
- // }
- //调用指定方法
- //调用不带参数的方法
- [ani performSelector:@selector(run)];
- //调用带两个参数的方法
- Animal *dog = [Dog new];
- [dog performSelector:@selector(eat:andFoodName:) withObject:@"张" withObject:@"雪糕"];
-
- }
- return 0;
- }
复制代码
Animal *ani = [Animal new];
[ani performSelector:@selector(run:andFoodName:)withObject:@"第一个参数" withObject:@"第二个参数,若函数只有一个,则不存在第二个withObject";
代码实现
- #interface Animal:NSObject
- -(void)run;
- #end
- #implementation Animal
- -(void)run
- {
- NSLog(@"Animal在跑");
- }
- #end
- #interface Dog:Animal
- -(void)eat;
- -(void)eat:(NSString *)name andFoodName:(NSString*) foodName;
- #end
- #implementation Dog
- -(void)eat
- {
- NSLog(@"Dog在吃");
- }
- -(void)eat:(NSString *)name andFoodName:(NSString*)foodName
- {
- NSLog(@"%@正在吃%@",name,foodName);
- }
- #end
复制代码
实现并测试
|
|