Objective-C运行时库使用

Adi*_*yam 2 macos cocoa runtime objective-c

在objective-c中使用运行时库可以解决的问题究竟是什么?我认为运行时库o_o没有实际用途

zne*_*eak 8

被征服的主要问题是使语言有效.如果没有ObjC运行时库,则没有ObjC程序可以工作.

ObjC运行时库实现向对象发送消息,从类中查找方法实现,获取类数据等.所有这些都无法在编译时完成,因此需要运行时支持.这种对运行时支持的需求催生了ObjC运行时库.

如果它与Objective-C相关,那么运行时库可能就在它后面.

正如文档所述,

此共享库提供对Objective-C语言的动态属性的支持,因此由所有Objective-C应用程序链接.

此引用主要用于在Objective-C和其他语言之间开发桥接层,或用于低级调试.

您可能需要查看功能列表.有些人会objc_msgSend执行您可能错误认为理所当然的行为.例如,电话:

[foo bar:4];
Run Code Online (Sandbox Code Playgroud)

实际上编译为:

objc_msgSend(foo, sel_getUid("bar:"), 4);
Run Code Online (Sandbox Code Playgroud)

或者沿着这些方向的东西.