美文网首页
iOS开发中C函数调用OC方法

iOS开发中C函数调用OC方法

作者: YYT1992 | 来源:发表于2017-10-13 16:57 被阅读52次

从汇编角度来看:无论是C函数或者是OC方法,他们同样都是一个函数的地址。
区别为:
C函数调用直接通过 函数名(参数)找到函数指针 直接执行函数地址,不需要考虑其他问题,只要定义好就能直接用.
OC 是属于类的方法,结构上多了一层封装性,要调方法必须要找到 类的地址然后再通过类的地址找到方法的地址,然后再执行函数地址。

那么:如何能够在C函数里面调用OC的方法呢?
答案就是:指定一个全局变量来保存类的地址,在通过类的地址找到类方法(函数)的地址调用。

1首先新建工程在加入一个SuperViewController 定义一个全局指针指向self

import "SuperViewController.h"

//1定义一个全局静态变量指针用于保存当前类的地址
static SuperViewController *selfClass =nil;
@interface SuperViewController ()
@end
//2函数指针指向自己

  • (void)viewDidLoad {
    [super viewDidLoad];
    //函数指针指向本身
    selfClass =self;
    }

//3实现一个OC方法
-(void)testAction{
NSLog(@"这是一个OC方法");
}

//4在C函数中调用OC方法
void function(){
[selfClass testAction];
}

//5调用C方法
function();

控制台输出:
2016-09-18 10:19:24.778项目[4702:57024]这是一个OC方法

转载:http://blog.csdn.net/u010858147/article/details/52571939

相关文章

  • [iOS]libffi动态调用C函数

    前言:在iOS开发中可以使用Runtime动态调用OC方法,但是无法动态调用C函数,那么该如何动态调用C函数呢?值...

  • 递归

    在iOS开发中,方法内部不能调用自身方法,但是OC开发是兼容C语言的,因此,我们可以使用C来实现递归的方法: 调用输出

  • iOS开发中C函数调用OC方法

    从汇编角度来看:无论是C函数或者是OC方法,他们同样都是一个函数的地址。区别为:C函数调用直接通过 函数名(参数)...

  • C++ 调用 OC

    iOS 开发中,经常会用OC 与C++混合开发。本篇文章就介绍一下 OC / C++的相互调用. OC => C+...

  • runtime NSProxy 消息转发

    oc中调用方法其实就是向对象发送消息,在编译Objective-C函数调用的语法时,会被翻译成一个C的函数调用:o...

  • 如何在C语言函数中使用self调用OC的方法(链接)

    如何在C语言函数中使用self调用OC的方法

  • 3,消息转发机制

    1,OC方法的调用 OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiver(方法调用...

  • Unity3D与iOS通信

    unity3d调用iOS函数,实现传参以及得到返回值;C#: 在需要调用函数传参的时候调用即可 OC:建立一个OC...

  • fishhook源码解析

    前言 fishhook是fackbook开源的一个用来hook c函数的库。在iOS开发中我们一般都是对OC方法进...

  • objc_msgSend调用流程

    oc的方法调用 OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiver(方法调用者)...

网友评论

      本文标题:iOS开发中C函数调用OC方法

      本文链接:https://www.haomeiwen.com/subject/laozyxtx.html