问题标签 [objective-c-runtime]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
29071 浏览

objective-c - 获取 Objective-C 类或实例的所有方法

在 Objective-C 中,我可以测试给定的类或实例是否响应某些选择器。但是如何查询一个类或实例的所有方法或类的属性(例如,所有方法或属性的列表)?

0 投票
10 回答
23918 浏览

objective-c - 为什么 Objective-C 不支持私有方法?

我已经看到了许多在Objective-C中声明半私有方法的策略,但似乎没有办法制作真正的私有方法。我接受。但是,为什么会这样?我基本上说的每一个解释,“你做不到,但这是一个非常接近的近似值。”

有许多关键字应用于ivars(成员)来控制其范围,例如@private, @public, @protected。为什么方法也不能这样做?看起来运行时应该能够支持的东西。有没有我缺少的基本哲学?这是故意的吗?

0 投票
1 回答
721 浏览

c - Objective-C 运行时如何实例化根元类和其他类描述?

我正在尝试实现一个基本的面向对象的 ANSI C 运行时并使用 Objective-C 作为指南。

它们似乎是三个部分。类描述、类接口和类实现。为了实例化类接口,使用类对象实例化对象的熟悉方法只有在运行时已经使用类描述实例化了您的类对象时才会发生。

那么所有类定义在第一次运行时都是静态分配的,以提供使用类对象实例化的能力吗?或者如果它们是动态分配的(在初始调用时),如何分配?它是运行循环的一部分,还是类实际上是一个函数,在转发消息之前确定它是否已经被分配?

0 投票
1 回答
280 浏览

objective-c - How to obtain the list the current instantiated objects for a given class in Objective-C?

Since class_poseAs(..) is deprecated in Objective-C 2.0, I need to find another way to change the class of an object at runtime. I've found I can change an object's class using object_setClass(..). My problem now is finding all the current instances of a given class in order to update them.

A solution would be to maintain a global dictionary of the instances I want to potentially update, but I'd like to know whether there's already a way to obtain such a collection from the reflective api.

I checked Apple's Runtime reference and I cannot find anything useful. Updating just the method of a class with method_exchangeImplementations(..) is not a solution for me since I want to be able to reuse the old implementation by using super.

0 投票
1 回答
449 浏览

objective-c - +(void)initialize 是否执行任何线程锁定?

查看“初始化”的定义:

讨论

运行时恰好在类或从它继承的任何类从程序中发送其第一条消息之前向程序中的每个类发送一次初始化。(因此,如果不使用该类,则可能永远不会调用该方法。)运行时以线程安全的方式将初始化消息发送到类。超类在其子类之前收到此消息。

据说初始化是以“线程安全的方式”发送的。在幕后,运行时是创建一个锁以使调用线程安全,还是仅仅从运行时的工作方式来看它本质上是线程安全的?如果它确实锁定了,这是否意味着如果您实现 +initialize 运行时会创建一个原本不会创建的锁定?

0 投票
3 回答
59052 浏览

objective-c - Objective-C 类 -> 类似字符串:[NSArray className] -> @"NSArray"

我正在尝试从类对象本身获取类的字符串名称。

我发现object_getClassName(id obj)了,但这需要将实例传递给它,在我的情况下,这是不必要的工作。

那么如何从类对象而不是实例中获取字符串?

0 投票
4 回答
591 浏览

iphone - 有什么方法可以检查实例是否仍在内存中?

示例:我有一个视图控制器并摆脱它。但是仍然有一个变量保存它的内存地址。访问它会导致 EXEC_BAD_ACCESS。当然。但是:有什么方法可以检查该变量是否仍然有效?即如果它仍然指向内存中存在的东西?

0 投票
1 回答
107 浏览

iphone - iSimulate 自动挂钩

我想知道是否有人知道 iSimulate 如何自动将自己注册/挂钩到已调试的 iDevice 应用程序中?它就像包含静态库(和几个框架)一样简单,并且可以正常工作。没有可调用的方法或函数。这怎么可能?

0 投票
4 回答
2346 浏览

objective-c - 在 Objective C 中构建动态类

我是一个有点称职的红宝石程序员。昨天我决定最终尝试使用 Apple 的 Cocoa 框架。帮我看看 ObjC 的方式?

我正在努力解决objc_allocateClassPair问题objc_registerClassPair。我的目标是动态生成一些类,然后能够像使用任何其他类一样使用它们。这在 Obj C 中有效吗?

分配和注册类A后,调用时出现编译错误[[A alloc] init];(它说'A' Undeclared)。我只能A使用运行时的objc_getClass方法进行实例化。有什么方法可以告诉编译器A并像我一样传递消息NSString吗?编译器标志或什么?

我有 10 个左右的其他类 ( B, C, ...),它们都具有相同的超类。我想[A classMethod][B classMethod]不需要objc_getClass. 我是想在这里过于活跃还是只是搞砸了我的实施?它看起来像这样……</p>

0 投票
1 回答
137 浏览

objective-c - 转发课堂消息

我知道我可以使用-forwardInvocation:. 我可以对发送到类对象的消息执行相同的操作吗(如 中+forwardInvocation:)?