objective-c-runtime相关内容

在Objective-C中将对象转换(或复制)到子类实例

我想将一个对象的实例转换为该对象类的子类的实例,以便可以在Objective-C中使用该子类的其他方法和属性. 如何以不需要我在复制方法中硬编码该对象类的属性的方式来做到这一点? 解决方案 在Objective-C中无法将对象转换为子类的实例.但是,通过下面的类,您可以提供对象和子类的实例,并将所有属性的值复制到子类实例.此实现适用于 Objective-C 对象类型和 C 原语.只 ..
发布时间:2021-05-31 19:10:04 移动开发

如何动态确定Objective-C属性类型?

我正在尝试动态确定Objective-C中属性的类型.根据我在本网站及其他地方所读到的内容,我相信自己做的是正确的.但是,我的代码无法正常工作. 下面的代码片段演示了该问题.尝试获取均为UIView的有效属性的"backgroundColor"和"frame"的属性信息失败(class_getProperty()返回NULL): id类型= [UIView类];objc_property ..
发布时间:2021-05-16 21:04:55 移动开发

在运行时更改枚举值?

是否有一种方法可以在运行时在目标c中为枚举分配值?我有几个枚举,并希望每个枚举都具有一定的价值.可以从xml文件中读取值.有办法吗? 解决方案 不幸的是,@ Binyamin是正确的,您不能使用枚举来做到这一点.因此,我通常在项目中执行以下操作: .h中的 //typedef int MyEnum;结构{MyEnum value1;MyEnum value2;MyEnum value3 ..
发布时间:2021-05-04 20:23:15 移动开发

在没有"super"的情况下调用super.关键词

我想'实现Xcode 3中的“修复并继续功能". 上下文: 主要思想是: 当我需要“快速修复问题"时,无需重新编译项目.我正在用'updated'方法实现编译小的Attacker class,将其加载到内存中,并替换运行时具有incorrect实现的VictimClass的方法. 我认为这种方法可以在整个项目重新编译时更快地工作. 当我完成修复后,我只是将Attacker cla ..
发布时间:2021-02-08 20:42:29 移动开发

迅捷:等效的objective-c运行时类

什么是低于Objective-C代码的等效Swift代码.我找不到带有运行时概念的快速主题. #import Class class = [self class]; 试图获取self的类对象? 更新: 尝试使用以下代码,错误为'UIViewController.type' doesn't conform to protocol 'AnyOb ..
发布时间:2020-11-30 21:45:34 移动开发

获取NSInvocation的消息发件人

我如何获取包裹在NSInvocation中的消息的发件人? 我在一个对象中,而我刚刚收到了一个调用 forwardInvocation:。 是否有办法知道谁是第一位向我发送消息的人? 解决方案 否。有关发件人的信息不可用(除非您显式添加 sender:self 自变量)。 另请参见此线程 http://www.cocoabuilder.com/archive/cocoa/19 ..

-rewrite-objc和clang中的Objective-C

最近,我有一个问题。铛可以使用-rewrite-objc将Objective-C转换为c ++。 所以我认为,第一步。 clang将Objective-C编译为C ++。然后只能使用c ++编译器进行编译。这样吗? clang首先使用运行时将Objective-C转换为C ++,然后编译为机器代码? 解决方案 -rewrite-objc 可以将ObjC转换为C ++,因此可以在Visu ..
发布时间:2020-10-01 22:11:52 其他开发

Objective-C运行时如何知道弱引用的对象是否仍然存在?

随着ARC的出现,提供了一些新功能,以使开发人员可以使用弱引用的对象. id objc_loadWeak(id *location)是其中之一.该函数接收一个对应于内存中弱对象存储位置的参数,如果该对象仍然存在,则返回该对象;如果释放该对象,则返回nil. 似乎当将对象obj作为weak存储在具有id objc_storeWeak(id *location, id obj)的位置locati ..

使用旧版运行时的平台不支持部署到OS X 10.6和"-fobj-arc".

背景: 我正在为OS X构建一个应用程序,其部署目标为10.6.我还没有将应用程序完全转换为ARC,但是我添加了一些新的类,这些类将从ARC中受益,因此我为这些类设置了-fobj-arc编译器标志. 通用32/64位Intel 架构的编译失败,错误 -fobj-arc在使用旧版运行时的平台上不支持. 仅针对64位构建成功. 我不熟悉低级架构.我的问题是:仅针对64位Inte ..

Swift 2.0复制OBJC_ASSOCIATION_RETAIN

我正在扩展Swift 2.0中的某些类以与ReactiveCocoa 3.0(swift-2.0分支)一起使用,但遇到了一些麻烦. 我关注了Colin Eberhardt的教程,并已复制粘贴了他的一些 UIKit扩展逻辑转到我的OS X应用.除了此属性:UInt(OBJC_ASSOCIATION_RETAIN),所有这些都可以很好地编译,从而给我带来以下编译器错误. 使用未解析的标识符 ..
发布时间:2020-07-10 06:18:51 移动开发

为什么Objective-C编译器需要知道方法签名?

为什么Objective-C编译器需要在编译时知道将对象推迟到运行时(即动态绑定)时将在对象上调用的方法的签名?例如,如果我写[foo someMethod],为什么编译器必须知道someMethod的签名? 解决方案 由于至少需要调用约定(对于ARC,有更多的原因,但是调用约定一直是个问题). 您可能已经被告知[foo someMethod]被转换为函数调用: objc_ms ..
发布时间:2020-06-30 21:08:57 移动开发

确定在运行时Objective-C方法是否可变

是否有一种方法可以在运行时找出给定方法是否为可变参数类型? method_getTypeEncoding()之类的东西;那不会告诉我方法是否接受可变数量的参数.还是有个诀窍可以告诉我们? 解决方案 Robert的评论正确.考虑: @interface Boogity @end @implementation Boogity - (void)methodWithOneIntArg:(i ..

ObjC方法类型编码字符串中的位数是多少?

我正在阅读 Apple的有关Objective-C运行时类型编码字符串的文章 某些方法的类型字符串中包含数字. v12@0:4@8中的数字是什么意思? 解决方案 这看起来像是setter方法的编码,如下所示: - (void) setSomething:(id) anObject 要分解它: v表示空返回类型 12表示参数帧的大小(12个字节) @0表示在参数帧的 ..
发布时间:2020-06-30 21:07:47 移动开发

通过运行时调用块,是否类似于NSInvocation?

我有一个未知类型的块(如id)和需要传递给该块的参数数组.参数可以是包装为NSNumber/NSValue的对象或数字/结构. Block也可能返回对象,数字或结构.这是一个库代码,并且事先不知道参数的类型. 假设我可以从块描述符中动态读取签名,是否有一种方法可以构造类似于NSInvocation的代码来调用块? 解决方案 令人惊讶的是: CGAffineTransform ( ..

Objective-C-对象是否可以直接执行方法IMP,就好像它是自己的一样?

假定我有一个对象,即MyClass的实例.在Objective-C中,可以通过向对象发送消息或使用NSObject的“执行"来要求对象“执行"选择器. 此选择器必须在编译时作为类定义的一部分进行定义,更准确地说,作为该类的实例方法,或者在Obj-C Runtime的帮助下,将该方法添加到(整个)MyClass中使用class_addMethod运行时. 我的问题如下: 是否可以向 ..
发布时间:2020-05-19 18:36:53 移动开发