iOS 动态调用方法
- (void)bugly
{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
if (NSClassFromString(@"Bugly")) { Class clazz = NSClassFromString(@"Bugly");
SEL sel = NSSelectorFromString(@"startWithAppId:config:");
IMP imp = [clazz methodForSelector:sel];
void (*IMP_startWithAppId)(id, SEL, NSString *, id) = (void *)imp; NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
Class buglyConfig = NSClassFromString(@"BuglyConfig");
id config = [[buglyConfig alloc]init];
[config setValue:@"NO" forKey:@"debugMode"];
[config setValue:[info objectForKey:(NSString *)kCFBundleIdentifierKey] forKey:@"channel"];
[config setValue:[info objectForKey:(NSString *)kCFBundleNameKey] forKey:@"version"]; IMP_startWithAppId(clazz, sel, BUGLY_KEY, config);
}
});
}
如上述示例代码,是对接Bugly的一段代码。我们APP里面并不需要导入bugly的类,通过拿到类的IMP ,来直接调用bugly的初始化方法,达到低耦合的目的。
在处理一些第三方框架或是服务的时候,建议这样处理比较灵活。
Class clazz = NSClassFromString(@"XXXLoginViewController");
SEL sel = NSSelectorFromString(@"sharedInstance");
IMP imp = [clazz methodForSelector:sel];
id (*setUserDataFunc)(id, SEL) = (void *)imp;
id loginVC = setUserDataFunc(clazz,sel);
UIButton * btn = [loginVC valueForKey:@"mobileValBtn"];
iOS 动态调用方法的更多相关文章
- Struts2 动态调用方法
struts2动态调用方法有两种方式 方式一:用通配符进行调用: Action方法: package com.bjyinfu.struts.actions; public class CatchDyn ...
- struts2 type="redirectAction"重定向 与动态调用方法
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-/ ...
- Xcode中Objc动态调用方法同时避免警告的几个办法
我们在Xcode中使用objc写代码的时候往往会碰到动态调用方法的时候. 如果是静态调用这很常见,不会有任何问题: [self performSelector:@selector(method)]; ...
- C#使用表达式树动态调用方法并实现99乘法表
我们在使用C#编程的时候,经常使用反射来动态调用方法,但有时候需要动态的生成方法,下面介绍使用表达式树的方式来自动生成方法,并调用. 首先需要说明什么是表达式,熟悉Linq的程序猿都用过类似于下面的代 ...
- Guava动态调用方法
前言 大家在Coding的时候,经常会遇到这样一个情况,根据不同的条件去执行对应的代码.我们通常的处理方式是利用if-else判断,或者直接switch-case,特别是jdk1.6之后,swith开 ...
- C# 知识点笔记:IEnumerable<>的使用,利用反射动态调用方法
IEnumerable<T>的使用 创建一个IEnumerable对象 List<string> fruits = new List<string> { " ...
- spring动态调用方法
有的时候为了程序的灵活性,需要根据参数动态的调用方法.代码框架大致spring为主,下面是具体代码: 接口: 实现类(实现类中有一个从spring容器中取的对象) 这是最初我直接用反射去调用的代码: ...
- 利用java反射动态调用方法,生成grid数据
项目中需要java后台查询并组装前台grid的数据,数据行数不定,数据行定义不定,开始用了最原始的方法,写了几百行,就是前台需要什么字段后台拼接什么字段,java代码冗余量非常大,并且不够灵活,一旦前 ...
- php中怎么使用call_user_func动态调用方法
php中可使用call_user_func进行方法的动态调用,可以动态调用普通函数.类方法以及带参数的类方法1.定义一个普通函数getCurrentDate,用于获取今天日期.call_user_fu ...
随机推荐
- ielowutil.exe应用程序错误解决方法
转载: http://wenda.so.com/q/1484111785202192 控制台方法: .按住“Window”+“R”->输入“cmd”->确定 .输入“ ”->回车-& ...
- THINKPHP5加载公共头部尾部模板方法
之前在3.2中用 <include file="public/header" /> 后来发现在thinkphp5中应该这样写才行 {include file=" ...
- iOS 文件和数据管理 (可能会删除本地文件储存)
转自:http://www.apple.com.cn/developer/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgramm ...
- centos7上面安装MySQL
date:2018-04-03 14:07:54 本文摘自网上,经本人整理后如下:原作者及出处为: [日期:2016-09-18] 来源:Linux社区 作者:xyang81 1.配置YUM源 下 ...
- 【BZOJ1895】Pku3580 supermemo Splay
[BZOJ1895]Pku3580 supermemo Description 给出一个初始序列fA1;A2;:::Ang,要求你编写程序支持如下操作: 1. ADDxyD:给子序列fAx:::Ayg ...
- Map中存放数组
Map<String,Object> map = new HashMap<String, Object>(); Map<String,String> agentMa ...
- 关于ln(link)命令
一. ln分为硬链接和软链接. 二. 硬链接命令为: ln test/a.text hard.text 1. 这样hard.text拥有 test目录下a.text相同的i节点(inode的id号)和 ...
- uilabel 自适应
有时一个UILable的text内容是变化的,而且差异有很大, 需求上要求UILabel的大小高宽能够自适应text的内容.代码例子: myLable=[[UILabel alloc] initWit ...
- 基于HTTP协议的轻量级开源简单队列服务:HTTPSQS 笔记
队列服务就是为了提高相应速度,把耗时或者不需要即时处理的流程放到异步处理过程中,HTTPSQS就是这样一个服务. 更详细的可以参考 http://blog.s135.com/httpsqs/,这里记录 ...
- 剑指Offer——把二叉树打印成多行
题目描述: 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 分析: 二叉树的层次遍历,利用队列. 代码: /* struct TreeNode { int val; struct T ...