github 传送门: https://github.com/mythkiven/iOSAppInC
包含3个C文件:
main.c:实现oc中main.m的功能,设置自动释放池,调用UIApplicationMain函数;
MKAppDelegate.c: 实现oc中AppDelegate.m的功能,设置window,controller;
MKView.c: 类似oc中一个纯代码的view,绘制简单的视图。
实现的效果如下图:
其中需要注意的几点简单说下:
1、直接用 C 写的函数,在 main 中报 SIGABRT 错误。
是由于我们写的类,并没有被 dyld 注册到 table 中,所以到了 main 这里,就找不到 AppDelegate。
用 __attribute__((constructor)) 修饰以保证函数在 main 之前执行。
2、@selector 在纯 C 环境用不了?
示例:
[tableView cellForRowAtIndexPath:indexPath];
在 OC 环境中写法:
objc_msgSend(tableView, @selector(cellForRowAtIndexPath:), ind