• -(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

      respondsToSelector的相关使用
      #import <Foundation/Foundation.h>


      @interface Tester : NSObject {

      }

      -(void) test:(NSString*) msg;

      -(void) notImp;

      @end
      respondsToSelector的相关使用
      Tester.m
      respondsToSelector的相关使用
      #import "Tester.h"

      @implementation Tester

      -(void) test:(NSString*) msg
      {
      NSLog(@"%@", msg);
      }

      @end
      respondsToSelector的相关使用
      注意:没有实现notImp方法

      main.m

      respondsToSelector的相关使用
      #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;
      }
      respondsToSelector的相关使用
       
       
       
       
      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  

Tester.h

respondsToSelector的相关使用
#import <Foundation/Foundation.h>


@interface Tester : NSObject {

}

-(void) test:(NSString*) msg;

-(void) notImp;

@end
respondsToSelector的相关使用
Tester.m
respondsToSelector的相关使用
#import "Tester.h"

@implementation Tester

-(void) test:(NSString*) msg
{
NSLog(@"%@", msg);
}

@end
respondsToSelector的相关使用
注意:没有实现notImp方法

main.m

respondsToSelector的相关使用
#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;
}
respondsToSelector的相关使用
 
 
 
 
  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  

相关文章:

  • 2021-06-16
  • 2021-12-13
  • 2021-11-30
  • 2021-12-16
  • 2022-01-03
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-05
  • 2021-07-19
  • 2022-12-23
  • 2022-01-05
  • 2021-09-10
相关资源
相似解决方案