objective-c-runtime相关内容

Swift本机基类或NSObject

我用Swift测试了 isa swizzling ,发现它仅在NSObject是超类时才有效(直接或进一步),或使用'@objc'装饰.否则,它将遵循静态和vtable-dispatch样式,例如C ++. 在没有Cocoa/NSObject基类的情况下定义Swift类是否正常?如果我担心的话,这意味着要放弃Objective-C的大部分活力,例如方法拦截和运行时自省. 动态运行时行为 ..
发布时间:2020-05-19 00:01:57 移动开发

Objective-C动态创建的方法和编译器警告

如果我在运行时动态生成方法然后调用它们-我如何说服编译器该类将响应未声明的(生成的)方法并使其不引发警告? 有关答案的更新 当我生成方法时-在编译时不知道它们的名称.举个例子-如果我有一个视图控制器MyFooController并且它是用方法initWithFoo:(Foo*)foo启动的,那么我将能够为UINavigationController生成类似pushMyFooContro ..
发布时间:2020-05-09 02:25:11 移动开发

Objective-C类->像这样的字符串:[NSArray className]-> @"NSArray";

我正在尝试从类对象本身获取类的字符串名称. // For instance [NSArray className]; // @"NSArray" 我找到了object_getClassName(id obj),但这需要将实例传递给它,对于我而言,这是不必要的工作. 那么如何从类对象中获取字符串,而不是实例呢? 解决方案 NSString *name = NSStringFr ..

在Objective-C运行时中动态访问局部变量

通过Xcode连接到调试器时,LLDB提供了一个有用的局部变量视图(屏幕截图的左下方): 我发现了一个LLDB命令frame variable(和gdb的info locals),该命令提供了局部变量列表(如上图右侧所示). 我希望此功能可以在运行时在设备上执行.例如,我可以使用backtrace_symbols()访问堆栈跟踪,通过_cmd访问当前选择器,以及其他一些访问. 有 ..
发布时间:2020-05-02 10:46:12 移动开发

我的isa混乱打破了KVO

我正在尝试实施isa swizzling,因为我需要在某些对象的dealloc方法中进行一些操作.我覆盖-(Class)class;返回原始类的方法(如KVO一样).一切正常,直到我尝试将观察者添加到陷入困境的对象中为止.它只是崩溃了. 0x00000000()中的0x00000000 0x0091d22a在 _NSKeyValueRetainedObservationInfoForObj ..

object_getIvar无法读取BOOL iVar的值

object_getIvar(id object,Ivar ivar)正确读取iVArs的值,但在BOOL类型iVar上失败并崩溃。 我需要一个类的所有iVars的值。有什么方法可以解决它。 解决方案 object_getIvar似乎返回与手册所说内容相反的实际值(不是id)。如果您使用ARC,这将在尝试保留不是对象的返回值时立即导致处理器故障。 object_getInstanc ..
发布时间:2018-10-25 15:04:50 移动开发

什么是objc_setAssociatedObject()以及在什么情况下应该使用它?

在我接受的一个项目中,原作者选择使用 objc_setAssociatedObject()而我并不是100%明白它的作用或为什么他们决定使用它。 我决定查阅它,不幸的是,文档对其目的并不十分具有描述性。 objc_setAssociatedObject 使用给定的密钥和关联策略为给定对象设置关联值。 void objc_setAssociatedObject (id obj ..
发布时间:2018-09-28 10:37:33 移动开发

复制多个方法swizzles的方法IMP

我有一个类设置,理想情况下会读取传入的任何类的方法,然后在运行时将它们全部映射到单个选择器上,然后将它们转发到原始选择器。 这现在可以正常工作,但我一次只能使用一种方法。问题似乎是,一旦我调整第一个方法,我的IMP捕获和转发方法现在已经与其他方法IMP交换。由于他们使用新交换的IMP替换其他IMP,所以进一步尝试这个搞砸了。 1)所以我有MethodA,MethodB和CustomCa ..
发布时间:2018-09-21 20:16:28 移动开发

ios 6和7不会返回相同的结果

似乎我们使用 getPropertyType(..)的应用程序在ios7下失败。无论出于何种原因, getPropertyType(..) on例如NSString属性返回 NSString $'\ x19 \ x03 \ x86 \ x13 作为类型,而不仅仅是NSString,而不是NSNumber,它返回 NSNumber \ xf0 \ x90 \ xae \ x04 \ xff \ xf ..
发布时间:2018-09-21 19:58:53 移动开发

Xcode - 在项目中查找死方法

我很好奇是否有任何工具为此提供部分解决方案。由于performSelector,这是一个棘手的问题。 。 。但是工具应该至少能够提出候选人,使人的工作变得更容易。 解决方案 使用静态分析,由于Objective-C的动态特性,无法检测已定义但未使用的功能/方法。唯一合理的解决方案是使用 GCov 或类似工具。即使这样,你也必须让你的程序尽一切可能,以确保你不会删除一些在测试过程中没有使用过 ..
发布时间:2018-09-21 19:40:50 移动开发

在NSObject上使用类别提供默认协议实现有什么问题?

我一直在寻找一种方法来使用可选的协议方法并拥有干净的代码。换句话说: 1:否 respondsToSelector:调用我的代码全部 2.应该适用于任何方法签名,所以在NSObject上进行检查并调用 performSelector:的类别方法已经用完(并且NSInvocation与ARC合作有问题) 3:这个解决方案,IMO,假装是普遍的但是有所有缺点1 我最终提出了这个 ..

类是在两者中实现的。将使用两者之一

我有一个使用SocketRocket的依赖项(通过CocoaPods安装)并从HeapAnalytics导入静态库的项目。显然,HeapAnalytics库已经使用了SocketRocket。编译时没有错误,但在运行时收到以下内容: 类SRWebSocket在[path]和[path]中实现]。 将使用其中一个。哪一个未定义。 我不知道如何处理它,因为我见过的大多数解决方 ..
发布时间:2018-09-14 12:59:15 移动开发

任何与objc_setAssociatedObject和objc_getAssociatedObject的陷阱?

我正在研究如何将属性(在本例中为整数)添加到所有 UIView 实例,无论它们是否为子类。在类别中使用 objc_setAssociatedObject()和 objc_getAssociatedObject()是否采用Apple认可的相应方式? 我听到一些担心这构成了“运行时黑客”,并且可能导致难以追踪和调试的问题。有没有人见过这类问题?是否有更好的方法将整数属性添加到所有 UIView ..
发布时间:2018-09-13 14:51:05 移动开发

如何在NSOperation中实现NSRunLoop

我发布这个问题是因为我看到很多关于这个主题的混淆,因此我花了几个小时调试NSOperation子类。 问题在于NSOperation在异步回调完成之前执行非实际完成的异步方法时,你做得不好。 如果NSOperation本身就是回调委托它可能甚至不足以正确完成操作,因为在不同的线程上发生回调。 让我们说你在主线程中并创建一个NSOperation并将其添加到NSOperationQ ..

在Xcode 7中更改了+加载方法顺序

我发现Xcode 7(版本7.0(7A220))改变了在单元测试期间调用类和类别的 + load 方法的顺序。 如果属于测试目标的类别实现了 + load 方法,则现在调用它的最后一个实例该类可能已经被创建和使用。 我有一个 AppDelegate ,它实现了 + load 方法。 AppDelegate.m 文件还包含 AppDelegate(MainModule)类别。此外,还有一 ..
发布时间:2018-08-30 19:06:10 移动开发