Objective-C中动态识别的方法

本文介绍了Objective-C中用于动态识别类实例方法的几种方法,包括判断是否为指定类的成员或子孙、检查类实例是否响应特定选择器以及执行类实例的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



Objective-C中动态识别的方法

 - (BOOL) isKindOfClass: classObj //是否是其子孙或一员

 - (BOOL) isMemberOfClass: classObj //是否是其一员

 - (BOOL) respondsToSelector: selector //是否有这种方法

 + (BOOL) instancesRespondToSelector: selector //类的对象是否有这种方法

 - (id) performSelector: selector // 执行对象的方法


   #import "Square.h"
   #import "Rectangle.h"
   #import < stdio.h >


   int main(int argc, const char * argv[]) {
   	Rectangle * rec = [[Rectangle alloc] initWithWidth: 10 height: 20];
   	Square * sq = [[Square alloc] initWithSize: 15];


   	//            isMemberOfClass

   	//            true             
   	if ([sq isMemberOfClass: [Square class]] == YES) {
   		printf("square is a member of square class\n");
   	}


   	//            false
   	if ([sq isMemberOfClass: [Rectangle class]] == YES) {
   		printf("square is a member of rectangle class\n");
   	}


   	//            false
   	if ([sq isMemberOfClass: [NSObject class]] == YES) {
   		printf("square is a member of object class\n");
   	}


   	//            isKindOfClass
   	//            true             
   	if ([sq isKindOfClass: [Square class]] == YES) {
   		printf("square is a kind of square class\n");
   	}


   	//            true
   	if ([sq isKindOfClass: [Rectangle class]] == YES) {
   		printf("square is a kind of rectangle class\n");
   	}


   	//            true
   	if ([sq isKindOfClass: [NSObject class]] == YES) {
   		printf("square is a kind of object class\n");
   	}


   	//            respondsToSelector

   	//            true
   	if ([sq respondsToSelector: @selector(setSize: )] == YES) {
   		printf("square responds to setSize: method\n");
   	}


   	//            false
   	if ([sq respondsToSelector: @selector(nonExistant)] == YES) {
   		printf("square responds to nonExistant method\n");
   	}


   	//            true
   	if ([Square respondsToSelector: @selector(alloc)] == YES) {
   		printf("square class responds to alloc method\n");
   	}


   	//            instancesRespondToSelector

   	//            false
   	if ([Rectangle instancesRespondToSelector: @selector(setSize: )] == YES) {
   		printf("rectangle instance responds to setSize: method\n");
   	}


   	//            true
   	if ([Square instancesRespondToSelector: @selector(setSize: )] == YES) {
   		printf("square instance responds to setSize: method\n");
   	}


   	//            free memory
   	[rec release];[sq release];

   	return 0;
   }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值