OC反射机制-动态调用方法

Object-C技术学习,更多资源请访问 https://www.itkc8.com

//  main.m

//  OC反射机制-动态调用方法

//

//  Created by Goddog on 15/1/13.

//  Copyright (c) 2015年 Goddog. All rights reserved.

//

/*

 1.如果程序需要动态调用对象的setter、getter方法,可以通过Object-C提供的KVC机制来实现,如果对象要访问实例变量也可。

 2.如果程序需要判断某个对象是否可调用方法,可用respondsToSelector::该方法传入一个SEL参数(选择器)。

 3.在程序中动态获取SEL对象:(1)使用@selector指令来获取当前类中指定的方法,该指令要完整的方法签名关键字作为参数。

                        (2)使用SEL NSSelectorFromString(NSString* aSelectorName)函数根据方法签名关键字的字符串获取对应的方法。

 4.如果程序需要动态的调用对象的普通方法:(1)用performSelector:方法来实现,该方法第一个参数需要传入一个SEL对象,如           

                                      果调用参数需要传入参数,还可以通过withObject:标签来传入参数。

                                   (2)使用obj_msgSend(receiver,selector,...)函数来调用。该函数第一个参数

                                    是方法的调用者,第二个参数代表调用的方法,接下来的参数将作为调用方法的参数。

                                    在程序中使用objc-msgSend()函数,应该显示导入#import

                                    头文件,还有两个版本,objc_msgSend_fpret()函数用于当目标方法返回浮点数,

                                    objc_msgSend_stret()函数用于目标方法返回结构体数据。

 5.

 */

//
//  Car.h
//  OC反射机制-动态调用方法
//
//  Created by Goddog on 15/1/13.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//

#import 

@interface Car : NSObject

@end

 

//
//  Car.m
//  OC反射机制-动态调用方法
//
//  Created by Goddog on 15/1/13.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//
//显示引入头
#import 
#import "Car.h"

@implementation Car
//提供实现部分
-(void) move:(NSString*) count
{
    int num = [count intValue];
    for (int i = 0; i < num; i++ ) {
        NSLog(@"%@",[NSString stringWithFormat:@"汽车正在跑:%d",i]);
    }
}

-(double) addSpeed:(double) factor
{
    //此处希望能动态调用move方法
    //使用performSelector:动态调用move:方法
    [self performSelector:@selector(move:) withObject:[NSNumber numberWithInt:2]];
    [self performSelector:NSSelectorFromString(@"move:") withObject:[NSNumber numberWithInt:2]];
    
    //使用objc_msgSend()函数动态调用move:方法
    //objc_msgSend(self,@selector(move:),[NSNumber numberWithInt:3]);
    
    
    return 0;
}
@end

 

#import 

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    }
    return 0;
}

Object-C技术学习,更多资源请访问 https://www.itkc8.com

你可能感兴趣的:(Object-C)