博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
respondsToSelector的相关使用
阅读量:5340 次
发布时间:2019-06-15

本文共 3168 字,大约阅读时间需要 10 分钟。

 

    • -(BOOL) isKindOfClass: classObj 用来判断是否是某个类或其子类的实例
    • -(BOOL) isMemberOfClass: classObj 用来判断是否是某个类的实例
    • -(BOOL) respondsToSelector: selector 用来判断是否有以某个名字命名的方法(被封装在一个selector的对象里传递)
    • +(BOOL) instancesRespondToSelector: selector 用来判断实例是否有以某个名字命名的方法. 和上面一个不同之处在于, 前面这个方法可以用在实例和类上,而此方法只能用在类上.
    • -(id) performSelector: selector

      SEL sel = @selector (start:) ; // 指定action  

      if ([obj respondsToSelector:sel]) 

      { //判断该对象是否有相应的方法  

      [obj performSelector:sel withObject:self]; //调用选择器方法  

      使用[[UIApplication sharedApplication] keyWindow]查找应用程序的主窗口对象

      respondsToSelector判断是否实现了某方法

      Tester.h

      #import <Foundation/Foundation.h>
      @interface Tester : NSObject {
      }
      -(void) test:(NSString*) msg;
      -(void) notImp;
      @end
      Tester.m
      #import "Tester.h"
      @implementation Tester
      -(void) test:(NSString*) msg
      {
      NSLog(@"%@", msg);
      }
      @end
      注意:没有实现notImp方法

      main.m

      #import <Foundation/Foundation.h>
      #import "Tester.h"
      int main (int argc, const char * argv[])
      {
      NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
      id tester = [[Tester alloc] init];//注意,这里使用id
      SEL testSelector = @selector(test:);
      SEL notImpSelector = @selector(notImp:);
      if([tester respondsToSelector:testSelector])
      {
      //tester.m中实现了test方法
      [tester test:@"invoke test method"];
      }
      if([tester respondsToSelector:notImpSelector])
      {
      //test.m中没有实现此主就去
      [tester notImp];
      }
      [pool drain];
      return 0;
      }
       
       
       
       
      1. #import <UIKit/UIKit.h>  
      2.    
      3. @interface ViewController : UIViewController{  
      4.     UIButton *btn1;  
      5.     UIButton *btn2;  
      6.      
      7.     UILabel *label1;  
      8. }  
      9.    
      10. -(void)testRespond1;  
      11. -(void)notTest;  
      12.    
      13. @end  
      14.    
      15.    
      16. #import "ViewController.h"  
      17.    
      18. @implementation ViewController  
      19.    
      20. - (void)didReceiveMemoryWarning  
      21. {  
      22.     [super didReceiveMemoryWarning];  
      23.     // Release any cached data,images, etc that aren't in use.  
      24. }  
      25.    
      26. #pragma mark - View lifecycle  
      27.    
      28. - (void)viewDidLoad  
      29. {  
      30.     [super viewDidLoad];  
      31.          // Do any additional setupafter loading the view, typically from a nib.  
      32.      
      33.     btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];  
      34.     btn1.frame = CGRectMake(50, 100, 100, 50);  
      35.     [btn1 setTitle:@"BTN1" forState:UIControlStateNormal];  
      36.     [btn1 addTarget:self action:@selector(btn1Clicked:) forControlEvents:UIControlEventTouchUpInside];  
      37.     [self.view addSubview:btn1];  
      38.      
      39.     btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];  
      40.     btn2.frame = CGRectMake(200, 100, 100, 50);  
      41.     [btn2 setTitle:@"BTN2" forState:UIControlStateNormal];  
      42.     [btn2 addTarget:self action:@selector(btn2Clicked:) forControlEvents:UIControlEventTouchUpInside];  
      43.     [self.view addSubview:btn2];  
      44. }  
      45.    
      46. -(void)btn1Clicked:(id)sender  
      47. {  
      48.     if ([self respondsToSelector:@selector(testRespond1)])  
      49.     {  
      50.        [self testRespond1];  
      51.     }  
      52. }  
      53.    
      54. -(void)btn2Clicked:(id)sender  
      55. {  
      56.     if (![self respondsToSelector:@selector(notTest)])  
      57.     {  
      58.        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"notTest 没有被实现" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];  
      59.         [alert show];  
      60.         [alert release];  
      61.     }  
      62. }  
      63.    
      64. -(void)testRespond1  
      65. {  
      66.     label1 = [[UILabel alloc] initWithFrame:CGRectMake(50, 200, 220, 200)];  
      67.     label1.text = @"testRespond1 被实现了";  
      68.     [self.view addSubview:label1];  
      69.     [label1 release];  
      70. }  
      71.    
      72. - (void)viewDidUnload  
      73. {  
      74.     [super viewDidUnload];  
      75.     //Release any retained subviews of the main view.  
      76.     // e.g.self.myOutlet = nil;  
      77. }  
      78.    
      79. -(void)dealloc  
      80. {  
      81.     [super dealloc];  
      82. }  
      83.    
      84. @end  

转载于:https://www.cnblogs.com/lvyinbentengzhe/p/4154028.html

你可能感兴趣的文章
css3渐变画斜线 demo
查看>>
JS性能DOM优化
查看>>
设计模式 单例模式 使用模板及智能指针
查看>>
HAL层三类函数及其作用
查看>>
Odoo 去掉 恼人的 "上午"和"下午"
查看>>
web@h,c小总结
查看>>
java编程思想笔记(一)——面向对象导论
查看>>
Data Structure 基本概念
查看>>
Ubuntu改坏sudoers后无法使用sudo的解决办法
查看>>
NEYC 2017 游记
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
Python之旅Day14 JQuery部分
查看>>
core--线程池
查看>>
redux-effect
查看>>
Swift和OC混编
查看>>
Android轻量级的开源缓存框架ASimpleCache
查看>>
他山之石:加载图片的一个小问题
查看>>
shell - 常识
查看>>
mssql sqlserver 使用sql脚本 清空所有数据库表数据的方法分享
查看>>
分层图最短路【bzoj2763】: [JLOI2011]飞行路线
查看>>