A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© mazhichao 中级黑马   /  2015-7-5 14:13  /  1155 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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、调用带参数的方法
  1. #import <Foundation/Foundation.h>
  2. #import "Dog.h"
  3. int main(int argc, const char * argv[]) {
  4.     @autoreleasepool {
  5.         //动态类型检测的第二部分
  6.         //1、方法响应的检测
  7.         Animal *ani = [Animal new];
  8.         //1)判断实例对象能否调用指定的方法
  9.         //- (BOOL)respondsToSelector:(SEL)aSelector
  10.         //格式:对象 respondsToSelector:(SEL)
  11.         SEL s1 = @selector(eat);//把eat包装成SEL类型
  12.         BOOL isRespond = [ani respondsToSelector:s1];
  13.         if (isRespond) {
  14.             [(Dog*)ani eat];
  15.         }
  16.         else
  17.         {
  18.             NSLog(@"error");
  19.         }
  20.         //2)判断类能否响应指定的方法
  21.         //(BOOL)instancesRespondToSelector:(SEL)aSelector
  22.         //格式 类 instancesRespondToSelector:(SEL)
  23.         isRespond = [Dog instancesRespondToSelector:s1];
  24.         NSLog(@"%d",isRespond);
  25.         isRespond = [Animal instancesRespondToSelector:s1];
  26.         NSLog(@"%d",isRespond);
  27.         
  28. //        @try {
  29. //            [(Dog*)ani eat];
  30. //        }
  31. //        @catch (NSException *exception) {
  32. //            NSLog(@"error");
  33. //        }
  34.         //调用指定方法
  35.         //调用不带参数的方法
  36.         [ani performSelector:@selector(run)];
  37.         //调用带两个参数的方法
  38.         Animal *dog = [Dog new];
  39.         [dog performSelector:@selector(eat:andFoodName:) withObject:@"张" withObject:@"雪糕"];
  40.         
  41.     }
  42.     return 0;
  43. }
复制代码

         Animal *ani = [Animal new];
         [ani performSelector:@selector(run:andFoodName:)withObject:@"第一个参数" withObject:@"第二个参数,若函数只有一个,则不存在第二个withObject";
代码实现
  1. #interface Animal:NSObject
  2. -(void)run;
  3. #end
  4. #implementation Animal
  5. -(void)run
  6. {
  7.       NSLog(@"Animal在跑");
  8. }
  9. #end
  10. #interface Dog:Animal
  11. -(void)eat;
  12. -(void)eat:(NSString *)name andFoodName:(NSString*) foodName;
  13. #end
  14. #implementation Dog
  15. -(void)eat
  16. {
  17.        NSLog(@"Dog在吃");
  18. }
  19. -(void)eat:(NSString *)name andFoodName:(NSString*)foodName
  20. {
  21.     NSLog(@"%@正在吃%@",name,foodName);
  22. }
  23. #end
复制代码

实现并测试

1 个回复

倒序浏览
赞一下。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马