如何从Apple提供的源代码编译objc runtime

如题所述

坑占了确实略久(最近太忙, 只看不发)...... 不过评论里的一位同学说是一个长篇回答肯定不至于, 只是做了补漏工作, 把所有缺失的私有文件全部按照对应要求放到include下, 改改工程设置就算大功告成了, 由于我只在OSX下编译过, 又不接触微软系列所以没法帮题主具体在瘟都死下编译了, 如果题主不介意可以去我github上下 已经传上去了, 可以自行比对, 请猛戳 RetVal/objc4-532.2 · GitHub. 顺便回答小问题: 1. 是语言的运行时, 没有这个objc代码编译完基本不可能跑不起来. 2. 是可以的, 不然瘟都死下的iTunes里的那堆东西是什么, 基本可以认为是原封不动的带着依赖过来的. 是不是能让我们来开发呢, 也是可以的, 不过对于苹果外围的第三方开发人员来说, 非常麻烦, 因为缺失各种文件和编程环境, 开发前期预备工作比你项目本身还多, 得不偿失. 3. @"" 这个会创建一个NSString(这是废话, 但又不是), 严格意义上是__NSConstantString, 由编译器和runtime一个约定的结构体, 用来描述字符串常量对象, 我扯了这么多就是为了说明由@""定义的NSString是静态的, 编译期完全决定完毕, 所以第一个版本的test.m和printf("xxxx");没有什么区别. 而后面的test.m产生了消息发送(一般是用函数调用, 方法调用来说, 不过本人不是很喜欢这种掩盖objc特性的说法), 消息发送必然会走runtime做派发, 所以看1就懂了. 4.最后一问在2里就基本说明了.
温馨提示:内容为网友见解,仅供参考
无其他回答

如何在Xcode cocoa objc 这样的环境下嵌入python代码
objc就是objectiveC,是mac系统下面的编程语言,xcode同时支持objectC,C和C++,只是相应文件的后缀名不一样。cocoa是一个开发框架,可以理解成apple提供的面向对象编程的工具包和开发环境。本身就是用objectiveC写的,你可以在xcode里看见新建cocoa application之类的,就是mac系统下面最常用的应用程序。...

《挑战不用macOS逆向iOS APP》之ObjC语法、iOS应用开发、及Objection自...
首先,我们从Objective-C基础语法和消息传递入手,通过一个“Hello World!”源码,了解ObjC的基础知识。Objective-C中类的声明与实现、类方法和实例方法的声明与实现,以及变量与属性的使用,都以清晰的逻辑呈现。属性默认是private权限,无法直接访问,但可通过@property声明,选择是否自动生成getter()和set...

Apple 源码用到的一些数据结构
经过编译的类在程序启动后就被runtime加载,没有机会调用addIvar。程序在运行时动态构建的类需要在调用objc_registerClassPair之后才可以被使用,同样没有机会再添加成员变量。 理论上说,我还是认为可以添加,只是为什么一定不可以,就不得而知了。

apple用什么方式实现对一个对象的kvo
动态创建新的类需要用 objc\/runtime.h 中定义的 objc_allocateClassPair() 函数。传一个父类,类名,然后额外的空间(通常为 0),它返回给你一个类。然后就给这个类添加方法,也可以添加变量。这里,我们只重写了 class 方法。哈哈,跟 Apple 一样,这时候我们也企图隐藏这个子类的存在。最后 objc_registerClassPair...

Objective-C如何声明protected的方法?
在os中,方法调用都会转为objc_msgSend也就是编译器最后都转为objc_msgSend,而objc_msgSend在运行期才会查找相关的方法,进行调用。这样带来的问题是,编译器在编译期是不检查private\/protected\/public modifier的。所以无论你怎么藏,怎么精心设计,只要调用者知道函数原型都是可以调用的。

mac os x安装python科学计算库numpy
1、MAC OS 一般都自带 MAC Python,Apple自己扩展的版本。例如,Lion是64位Python版本,自带与Objctive C库的接口模块以及Apple系统的接口模块。但安装第三方与C、Fortran等相关的的Python模块时,就必须从源码编译或使用专门编译的64位二进制发行版。2、安装Python官方程序。从兼容的角度,Mac上可以安装...

ios workspace 删除的警告怎么去除
1. 最直接、最一劳永逸、最安全的方式,直接找到警告的那段代码,改为不警告。这个方式最安全。可是它有一个问题,就是,当我们很多文件都有这种类型的警告的时候,我们就需要改动很多很多的源码了, 对于不是我们写的源码,有可能随时会更新的,我们这种方式,显然就不太可取了。2. 使用编译器提供的...

如何在 mac os 上 run unidentified developer 的img
安装前必须知道的工作:1、MAC OS 一般都自带 MAC Python,Apple自己扩展的版本。例如,Lion是64位Python版本,自带与Objctive C库的接口模块以及Apple系统的接口模块。但安装第三方与C、Fortran等相关的的Python模块时,就必须从源码编译或使用专门编译的64位二进制发行版。2、安装Python官方程序。从兼容...

字节跳动DanceCC工具链系列之Swift调试性能的优化方案
图11:获取ObjectDescription的实现细节(SwiftLanguageRuntime.cpp) 而p使用了SwiftRuntime(Objc的话就是ISA,MethodList那些,资料很多不赘述),拿到了对象细节(支持CustomReflectable[5]协议),进行按层遍历打印。不过值得注意的是,SwiftRuntime依赖remoteAST(需要源码AST,即swiftmodule)或者Reflection(可能被Strip掉,并不一...

编程都有哪些语言
9、Objective-C Objective-C(ObjC)是一种面向对象的编程语言。Apple将其用于OSX和iOS操作系统及其应用程序编程接口(API)。它开发于1980年代,并在某些最早的操作系统中得到使用。Objective-C是面向对象的通用对象。你可以将其称为混合C,因为它为C编程语言添加了功能。 10、SQL SQL(es-que-el)代表结构化查询语言,...

相似回答