objective-c-runtime相关内容
我的公司开发了一个广告SDK,可以调解其他广告网络。在运行时,它使用 NSClassFromString 检查其他广告网络是否存在,如果它们存在则发送这些类消息。 这适用于Objective-C对象,但是如何在运行时加载字符串常量?在这种情况下,我想检查只能通过字符串常量提供的SDK版本( extern NSString * VungleSDKVersion; ) 解决方案 您可以使
..
我正在使用 object_setClass(id对象,Class cls)更改某些对象的类。我正在将类更改为原始类的子类。然后我设置一些仅在子类中定义的属性,并且似乎工作正常。 我有点惊讶,这是有效的,因为 object_setClass ,据我所知,不会重新分配对象,它只会更改 isa 指针。如果子类实例比原始类实例大得多(意味着有更多的ivars),我看不到对象如何按预期工作。 这
..
问题: 有没有办法以编程方式和以自动方式设置IBOutlet属性属性设置)?也许有一些“IBOutlet设置”例程,我可以用我自己的专门的代码拦截? 背景: b 导致上述问题的问题源于以下事实:运行以下方法时未设置“IBOutleted”大小约束(宽度和高度)(这是一种替换“占位符”视图的方法从IB的真实视图): +(UIView *)replaceWithNibView
..
我正在通过存储原始的实现来调用UIResponder及其所有子类的canPerformAction:withSender:方法。在由类名称键入的字典中; 这似乎在某些情况下运行良好,但是在原始实现时失败了调用超级。 这里可能出现什么错误? -original 与 -custom : p> - (void)custom { [self custom] // calls
..
我在这里阅读了 Objective-C之前的学习吗? 通常我会用纯C代码替换一些Obj-C代码(毕竟你可以混合它们,一个Obj-C方法可以完全,纯C代码) 这是真的吗? 是否可以纯粹用C编程语言构建iPhone应用程序? 解决方案 Damn,花了我一段时间,但我得到了: main.c: b #include
..
我试图使用 objc_getProtocol()函数来获取对代表 NSApplicationDelegate 协议: 协议* protocol = objc_getProtocol(“NSApplicationDelegate”); 但是,由于某种原因,这总是返回 NULL 。 其他协议如 NSObject , NSCoding code> NSTableVi
..
如何在运行时找到一个类覆盖其超类的方法? 例如,我想知道一个类是否有自己的实现 isEqual:或 解决方案 你只需要得到方法列表,然后寻找所需的方法: #import BOOL hasMethod(Class cls,SEL sel){ unsigned int methodCount; Method * methods
..
查看 Mac OS X 10.8版本的Objective-C运行时库源代码,我注意到它有一个 NSObject.mm 文件。顾名思义,它有 NSObject 类实现,以及内置的自动释放池和保留计数实现。 然而,Mountain Lion之前的ObjC运行时库的版本没有实现 NSObject 类(他们没有 NSObject .mm 文件,您可以在 Mac OS X 10.7的Objective
..
为什么必须动态分配Objective-c对象?为什么我必须让它指向一个对象,不像在C + +我可以创建他们在堆栈? 谢谢。 解决方案 主要原因:不知道要保留多少堆栈大小。 动态消息在这种情况下无关紧要,因为设置正确的“ vtable'在初始化时是微不足道的。 在c ++中,堆栈对象的大小总是已知的(如果它错了,你知道预期什么)。一个objc alloc / init序列可以返
..
我想将一个字符串转换为类名。想象一下,我有一个字符串,它改变了,包含一个类名,例如,字符串“MyExampleClass”。现在,我想创建一个 MyExampleClass 类的对象。我必须从字符串中获取类名。我想做类似下面的事情。 (考虑代码只是一个草图。) NSString * classNameStr =“MyExampleClass”; id theClass = [UICla
..
Objective-C中的 IMP 类型代表一个函数指针,就像我所理解的。是否有任何方法从块指针创建 IMP ?感谢您的想法。 解决方案 由于这是写入的,现在有iOS和Mac OS X中的API,直接进入IMPs。我写了一个网络日志帖子,说明API(imp_implementationWithBlock())。 一个块实际上是一个包含一点元数据,到块中包含的代码和在块内捕获的cons
..
Apple的Objective C Runtime Guide指出,你不应该在自己的代码中使用objc_msgSend(),并建议使用methodForSelector:。 在代码中调用objc_msgSend()的危险是什么? 解决方案 原因#1:错误的样式 - 多余的和不可读的 编译器自动生成 objc_msgSend()(或其某种变体)。如果你知道类和编译时发送的选择器,
..
是否可以在运行时向Objective C对象添加属性? 解决方案 class via class_addProperty(): BOOL class_addProperty b $ b const char * name, const objc_property_attribute_t * attributes, unsigned int attributeCount)
..
我试过这个代码: // main.m #import @interface Test +(void)test; @end @implementation Test +(void)test { printf(“test”); } @end int main() { [Test test]; return 0; }
..
如果我有一个类,如何列出其所有的实例变量名称? 例如: @interface MyClass:NSObject { int myInt; NSString * myString; NSMutableArray * myArray } 我想获得“myInt”,“myString”和“myArray “。有没有办法可能得到一个名字数组,我可以迭代?
..
在使用向量类型和ObjC运行时做一些错误时,我遇到了一个非常令人困惑的问题。 #import对于任何SIMD向量类型, int main(){ typedef int int4 __attribute __((vector_size(16))); typedef float float4 __attribute __((
..
我想在Objective-C上做一些运行时编程。 为了做到这一点我覆盖了 resolveClassMethod 方法。 不幸的是我想出了一些编译错误,活动: 错误:选择器'dynamic'没有已知的类方法 如果我使用gcc或clang没有ARC( -fno-objc-arc 选项传递),一切正常,除了警告而不是错误。 我知道ARC需要知道调用的方法的名称,以了解如何使用返
..
有一个Objective-C运行时库函数(的不会的)或一组能够在Objective-C检测静态的(准一流水平)变量的函数?我知道我可以使用一个类访问方法,但我希望能够在不写我的code“为测试框架”进行测试。 的或者的,有一个不起眼的普通的C技术的外部访问静态瓦尔?请注意,此信息对单元测试的目的,它不一定是适合生产使用。我意识到this'd违背静态瓦尔的意图......同事开始讨论这个话题,我在
..
我想实现一个基本的面向对象的ANSI C运行库和使用Objective-C作为指导。 他们好像是三部分组成。 A类描述,类接口和类实现。为了要实例化的类接口,如果运行时已使用类的描述已经实例化的类对象使用Class对象实例化一个人的对象熟悉的方法只能发生。 那么,在第一次运行静态分配提供使用Class对象实例的能力,所有的类定义?或者,如果他们是动态分配(初始调用),怎么样?是它的运行循环的一
..
我有关于使用在Objective-C星号的问题。只是要清楚:我知道指针是什么,一切都在程序C.我想,虽然两件事情: 1)为什么所有(引用)的Objective-C对象的指针?为什么不普通的变量? (即NSArray的阵列= [[NSArray的页头]初始化];) 2)调用方法时,你为什么忽略了星号? 谢谢! 解决方案 1)为什么所有(引用) Objective-C的对象的指针?
..