当不涉及到用户隐私的时候,我们调用私有方法一般都没有什么问题。

在我们调用私有方法之前,我们必须要先知道你想调用的对象有哪些私有方法,和需要参数的那些方法的参数类型,和返回值的类型是多少。

查看私有方法名,参数类型和返回值类型

- (void)scanMethodsTwo:(Class)class {

unsigned int outCount = 0; // unsigned int :是无符号基本整型,没有负数

Method *methods = class_copyMethodList(class, &outCount); // 获取类的方法列表

for (int i = 0; i < outCount; i++) {

Method method = methods[i];

// 获取方法名

SEL sel = method_getName(methods[i]);

NSLog(@"方法名==== %@", NSStringFromSelector(sel));

// 获取参数

char argInfo[512] = {};

unsigned int argCount = method_getNumberOfArguments(method);

for (int j = 0; j < argCount; j++) {

// 参数类型

method_getArgumentType(method, j, argInfo, 512);

NSLog(@"参数类型=== %s", argInfo);

memset(argInfo, '\0', strlen(argInfo));

}

// 获取方法返回值类型

char retType[512] = {};

method_getReturnType(method, retType, 512);

NSLog(@"返回值类型=== %s", retType);

}

free(methods);

}

调用无参数方法

当知道方法名过后,我们调用没有参数的私有方法,有两种:

方法一:使用performSelector来调用

[button performSelector:@selector(updateConstraints)];

方法二:也可以使用objc_msgSend来调用,但是是有这个必须要导入#import ,#import 这两个头文件。

((void(*)(id,SEL))objc_msgSend)(button, @selector(updateConstraints));

如果要使用下面这种写法,必须要在项目配置文件 -> Build Settings -> Enable Strict Checking of objc_msgSend Calls 这个字段设置为 NO, 默认为YES.

objc_msgSend(button, @selector(updateConstraints));

调用有参数方法

要使用objc_msgSend来调用,并传递参数

((void(*)(id,SEL, CGRect))objc_msgSend)(button, @selector(setFrame:), CGRectMake(200, 100, 50, 50));

objc_msgSend(button, @selector(setFrame:), CGRectMake(200, 100, 50, 50));

java私有方法_如何调用私有方法相关推荐

  1. JVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器

    文章目录 Pre 运行时数据区总览 线程栈 概要 栈内部主要组成部分 局部变量 操作数栈 动态链接 方法出口 小结 程序计数器 本地方法栈 附 测试demo javap JVM字节码指令集手册 Pre ...

  2. 在jQuery方法中能调用JS方法吗?

    在jQuery方法中能调用JS方法吗? 能,在jQuery方法中直接写入要调用已写好的方法名()即可. 在项目中,有多个地方用到结账的功能. 比如, 点击结账按钮,由JS获取对应行列的数据,进行计算并 ...

  3. java runnable 使用_如何调用java Runnable对象的其他方法?

    任何编程语言中的任何方法都在与调用者相同的线程中执行.当你调用Thread.start()时,它会在调用它的同一个线程中运行. 现在,您知道Thread的run()方法不会在与start相同的线程中执 ...

  4. java方法定义 与调用_Java方法的定义及调用

    Java方法的定义及调用 通过以上内容的学习,可以看出方法是一段可以完成某个特定功能的并且可以被重复利用的代码片段.接下来我们来学习一下方法应该怎么定义以及怎么调用. 定义/声明方法的语法格式如下所示 ...

  5. 【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 )

    文章目录 I . 调用 Java 方法流程 II . 获取 jclass 对象 ( GetObjectClass ) III . 获取 jclass 对象 ( FindClass ) IV . JNI ...

  6. java 反射调用set方法_java反射调用set方法时如果让参数做自动类型转换

    这段时间学习java的反射机制想实现一个功能:遍历一个Map,然后利用反射机制调用BO的set方法,完成BO属性的自动注入.这样设计的初衷是解决Excel数据导入问题中的Map数据填充BO这一过程. ...

  7. java 获取调用者方法_java获取调用当前方法的方法名和行数

    java获取调用当前方法的方法名和行数 String className = Thread.currentThread().getStackTrace()[2].getClassName();//调用 ...

  8. java 反射 set方法_java 反射调用set方法

    Java语言中的许多库类名称,多与咖啡有关.下面是小编为您带来的java 反射调用set方法,希望对大家有所帮助. java 反射调用set方法: import java.beans.Property ...

  9. python调用其他类中的方法_无法调用其他类中的方法

    以下是页面对象文件:登录名.py在from pages.base import BasePage from config import secrets from selenium.webdriver. ...

最新文章

  1. java8中的函数式数据处理
  2. 【Nodejs篇一】Node js 简介
  3. Matlab中varargin函数
  4. python中print的本质_Python基础语法全解
  5. 《敏捷软件开发》学习笔记 第20章
  6. 【转】我的第一个Python小程序
  7. c++ regex 替换汉字_C++ - 正则表达式(regex) 替换(replace) 的 详解 及 代码
  8. 笔记:C# log4net App.config 配置系统未能初始化问题的一种处理方法
  9. Excel 添加复选框
  10. Ubuntu、kubuntu、xUbuntu、lubuntu等版本区别及界面样式
  11. 算法 图4 哈利·波特的考试
  12. 关于PC端QQ无法加载群文件和打开在线群文件解决方法
  13. 太平洋电脑网左边菜单的实现
  14. Android Studio如何更新至最新版本4.2.2
  15. 万丈高楼平地起 ——浅谈网格计算基础
  16. 看见“信任”,可信计算平台的由来解读(TPM、TCM、TPCM、等保2.0解读)。
  17. 计算机在英语课堂的应用,浅谈信息化技术在英语课堂的应用
  18. Oracle中WITH ...... OPTION权限对于权限授予和收回的级联影响
  19. BIO-NIO-AIO网络IO模型
  20. 这才是真正意义上的微博互粉工具

热门文章

  1. 大学生课程设计 ------ Java Web课程设计(学生成绩管理系统03)
  2. MySQL学习笔记——20170811
  3. 可视化绘图技巧100篇分析篇(一)-数据降维NMDS分析(补充篇)
  4. Python语法--Mooc七月
  5. 高斯平滑算法 c语言,高斯模糊算法(gaussian)
  6. Excel 两列合并为一列中间加空格
  7. 影响蜂糖李苗花芽分化的因素
  8. Android应用架构之Retrofit
  9. Unity 事件中心
  10. 计算机无法安装windows系统怎么办,电脑无法安装Win10怎么解决