黑马程序员技术交流社区
标题:
响应方法
[打印本页]
作者:
mazhichao
时间:
2015-7-5 14:13
标题:
响应方法
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、调用带参数的方法
#import <Foundation/Foundation.h>
#import "Dog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//动态类型检测的第二部分
//1、方法响应的检测
Animal *ani = [Animal new];
//1)判断实例对象能否调用指定的方法
//- (BOOL)respondsToSelector:(SEL)aSelector
//格式:对象 respondsToSelector:(SEL)
SEL s1 = @selector(eat);//把eat包装成SEL类型
BOOL isRespond = [ani respondsToSelector:s1];
if (isRespond) {
[(Dog*)ani eat];
}
else
{
NSLog(@"error");
}
//2)判断类能否响应指定的方法
//(BOOL)instancesRespondToSelector:(SEL)aSelector
//格式 类 instancesRespondToSelector:(SEL)
isRespond = [Dog instancesRespondToSelector:s1];
NSLog(@"%d",isRespond);
isRespond = [Animal instancesRespondToSelector:s1];
NSLog(@"%d",isRespond);
// @try {
// [(Dog*)ani eat];
// }
// @catch (NSException *exception) {
// NSLog(@"error");
// }
//调用指定方法
//调用不带参数的方法
[ani performSelector:@selector(run)];
//调用带两个参数的方法
Animal *dog = [Dog new];
[dog performSelector:@selector(eat:andFoodName:) withObject:@"张" withObject:@"雪糕"];
}
return 0;
}
复制代码
Animal *ani = [Animal new];
[ani performSelector:@selector(run:andFoodName:)withObject:@"第一个参数" withObject:@"第二个参数,若函数只有一个,则不存在第二个withObject";
代码实现
#interface Animal:NSObject
-(void)run;
#end
#implementation Animal
-(void)run
{
NSLog(@"Animal在跑");
}
#end
#interface Dog:Animal
-(void)eat;
-(void)eat:(NSString *)name andFoodName:(NSString*) foodName;
#end
#implementation Dog
-(void)eat
{
NSLog(@"Dog在吃");
}
-(void)eat:(NSString *)name andFoodName:(NSString*)foodName
{
NSLog(@"%@正在吃%@",name,foodName);
}
#end
复制代码
实现并测试
作者:
杨庆庆
时间:
2015-7-5 20:23
赞一下。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2