本类.m文件:
#import "ViewController.h"
#import "AViewController.h"
#import
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIButton * btn=[UIButton buttonWithType:UIButtonTypeCustom];
btn.backgroundColor=[UIColor redColor];
btn.frame=CGRectMake(100, 100, 100, 100);
[btn addTarget:self action:@selector(btn) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
}
//第一种写方法的方式
void add(id self, SEL _cmd)
{
NSLog(@"ViewController btnClick");
}
//第二种写方法的方式
-(void)add
{
NSLog(@"ViewController btnClick");
}
-(void)btn
{
AViewController * vc=[[AViewController alloc]init];
//对应第一种写方法的方式
// class_addMethod([AViewController class], @selector(btnClick), (IMP)add, "v@:");
//对应第二种写方法的方式
class_addMethod([AViewController class], @selector(btnClick), (IMP)class_getMethodImplementation([self class], @selector(add)), "v@:");
[vc btnClick];
[self presentViewController:vc animated:YES completion:nil];
}
-(void)print:(int)str
{
NSLog(@"%d",str);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
需要添加方法的类.m文件:
#import "AViewController.h"
@class ViewController;
@interface AViewController ()
@end
@implementation AViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor=[UIColor whiteColor];
UIButton * btn=[UIButton buttonWithType:UIButtonTypeCustom];
btn.frame=CGRectMake(0, 0, 100, 100);
btn.backgroundColor=[UIColor redColor];
[btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
SEL myMethod = @selector(myLog:parm:parm:);
NSMethodSignature * sig = [[self class] instanceMethodSignatureForSelector:myMethod];
NSInvocation * invocatin = [NSInvocation invocationWithMethodSignature:sig];
[invocatin setTarget:self];
[invocatin setSelector:myMethod];
int a=1;
int b=2;
int c=3;
[invocatin setArgument:&a atIndex:2];
[invocatin setArgument:&b atIndex:3];
[invocatin setArgument:&c atIndex:4];
[invocatin invoke];
}
-(void)myLog:(int)a parm:(int)b parm:(int)c{
NSLog(@"MyLog%d:%d:%d",a,b,c);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end