Objective-C中动态识别的方法-转载自codeios论坛


- (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、付费专栏及课程。

余额充值