zoukankan      html  css  js  c++  java
  • Runtime 动态加载方法

    动态加载
    #import"ViewController.h"
    #import"Person.h"
    
    @interfaceViewController()
    
    @end
    
    @implementationViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
       // performSelector:动态添加方法
       Person*p = [[Person alloc]init];
    
       //动态添加方法
       //[p performSelector:@selector(eat)];

    //传参 [pperformSelector:@selector(eat:)withObject:@111]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } Person.h #import<Foundation/Foundation.h> @interfacePerson :NSObject @end Person.m #import"Person.h" #import<objc/message.h> @implementationPerson //定义函数 //没有返回值,参数(id,SEL) // void(id,SEL) voidaaaa(idself,SEL_cmd,idparam1) { NSLog(@"调用eat %@ %@ %@",self,NSStringFromSelector(_cmd),param1); } //默认一个方法都有两个参数,self,_cmd,隐式参数 // self:方法调用者 // _cmd:调用方法的编号 //动态添加方法,首先实现这个resolveInstanceMethod // resolveInstanceMethod调用:当调用了没有实现的方法没有实现就会调用resolveInstanceMethod // resolveInstanceMethod作用:就知道哪些方法没有实现,从而动态添加方法 // sel:没有实现方法 + (BOOL)resolveInstanceMethod:(SEL)sel { // NSLog(@"%@",NSStringFromSelector(sel)); //动态添加eat方法 if(sel ==@selector(eat:)) { /* cls:给哪个类添加方法 SEL:添加方法的方法编号是什么 IMP:方法实现,函数入口,函数名 types:方法类型 */ // @:对象:SEL class_addMethod(self, sel, (IMP)aaaa,"v@:@");//V@:@所代表的意思请查阅官方文档 //处理完 return YES; } return[super resolveInstanceMethod:sel]; } @end

    源自小马哥教学视频

  • 相关阅读:
    1001.A+B for Matrices
    1016.火星A+B
    1468.Sharing
    1464.Hello World For U
    约瑟夫问题pascal程序
    约数研究pascal程序
    迷宫pascal程序
    魔法照片pascal程序
    均分纸牌pascal程序
    多项式输出pascal程序
  • 原文地址:https://www.cnblogs.com/mapanguan/p/5498173.html
Copyright © 2011-2022 走看看