您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

封装iOS运行时库,一句话实现方法交换。 [免费源码]

  • 时间:2022-08-28 01:04 编辑: 来源: 阅读:303
  • 扫一扫,手机访问
摘要:封装iOS运行时库,一句话实现方法交换。 [免费源码]
长话短说,直接上代码就很直观了:【cc运行时交换方法:[self类]名称:@ " view will appear:" with block:void(id _ self,bool animated) {nslog (@ "已经上钩");//原方法实现会交换到新方法中,方法名可以通过//回调原ViewwillApparel中的代码[_ self perform selector:NSSelectorFromstring([CCRuntime exchange originmethodsselector Name:@ " ViewwillApparel:"]]with object:@(animated)]获得;}];至此,viewWillAppear已被成功替换。 在回调viewWillAppear之前,将首先执行打印代码。 如何实现?我把原方法的实现换成了block,把原方法的实现扔进了新方法。 可以获得新的方法名,必要时可以回调。 单击下载源代码的其他详细信息。除了方法交换之外,我还提供了其他API,它们提供了一种更可移植的方式来通过运行时操作方法、类和属性:方法1。将方法动态添加到类中。通过块解构方法实现:[cc runtime addmethodto:[self class]name:@ " get username:" with block:int(id _ self,int * userId){ nslog(@ " userId is:% d ",userId);return @“艾伦”;} returnType:@ " id " param types:@[@ " int "]];第二,在类中动态添加一个方法,用已有的方法构造方法实现:[cc runtime addmethodto:[self class]name:@ " bar " from:[self class]name:@ " foo "];[self perform selector:NSSelectorFromString(@ " bar ")];/* print:我是foo */-(void)foo {NSLog(@“我是foo”);} 3.重置一个方法的实现,用block重置[CC Runtime Reset Method:[self class]name:@ " foo ":{ ns log(@ "我不再是foo ")用block;}];【self foo】;/* Print:我不再是foo了*/IV。交换一个方法,并且这个方法将被实现为block: [CC运行时交换方法:[self类]名称:@ " ViewwillApparel:" with block:void(id _ self,bool animated) {ns log (@ "已经挂接");//原方法实现会交换到新方法中,方法名可以通过//回调原ViewwillApparel中的代码[_ self perform selector:NSSelectorFromstring([CCRuntime exchange originmethodsselector Name:@ " ViewwillApparel:"]]with object:@(animated)]获得;}];以前我们一般方法交换的做法是多写一个方法,然后在初始化的时候和运行时库交换。 现在,您可以优雅地聚合代码并快速实现需求。 Get属性列表:nsarray * props =[cc runtime getpropertylistlonlyname:[self class]];为对象属性添加动态属性:uiview controller * VC =[uiview controller new];/*给相似分类添加属性的做法,好处是不需要再写一个分类文件*/[CC Runtime SetObject:VC Copy Value:@ " Guangzhou " Forgey:@ " Address "];NSLog(@ "地址为:% @ ",[CC运行时对象:VC ValueForgey: @ "地址"]);类动态创建一个类:class cls =[ccruntimebuildclass:[uiview controller class]& amp:@ " testview controller " ivarandmethodbulider:(class _ nonnull _ _ unsafe _ un retained cls){//可以在块和方法中添加成员变量[cc runtime addi var:cls name:@ " name "];[cc runtime add method to:cls name:@ " test " with block:{ nslog(@ " method of I is test controller ");} returnType:@ " void " param types:@[]];}];uiview controller * VC =(uiview controller *)[cc runtime getclass instance:cls];// 1.测试成员变量[cc runtime setivarvalue:VC name:@ " name " value:@ "我是测试控制者"];NSLog(@“% @”,[cc runtime getIvarValue:VC name:@ " name "]);// 2.测试中的方法[VC perform selector:ns selector from string(@“test”)];// 3.试试刚才present动态创建的VC . view . background color =[ui color cyan color]类;[self presentViewController:vc动画:是完成:无];


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部