首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我收到此Objective-C错误消息:来自'objc_object*'的无效转换

这个Objective-C错误消息是由于尝试将一个objc_object*类型的对象转换为不兼容的类型而导致的。objc_object是Objective-C运行时的基础类,它表示Objective-C中的所有对象。

为了解决这个问题,你需要检查你的代码中的类型转换是否正确。确保你在将对象转换为其他类型时使用正确的类型转换方法,例如(YourClass *)yourObject。同时,确保你的对象实际上是该类型的实例,以避免类型转换失败。

如果你能提供更多关于错误消息和代码的详细信息,我将更好地帮助你解决这个问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

runtime

cache:因为Objective-C的消息转发需要查找dispatch table甚至可能需要遍历继承体系,所以缓存最近使用的方法。 protocols:类需要遵守的协议。...6、objc_object objc_object 只有一个指向类的 isa 指针,就是我们说的术语 “isa pointer”(isa 指针)。...7、isa 指针 isa 指针是当你向对象发送消息时,Objective-C Runtime 检查一个对象并且查看它的类是什么然后开始查看它是否响应这些 selectors 所需要的一切。...我们写 OC 代码,它在运行的时候也是转换成了 runtime 方式运行的。...当调用对象的某个方法的时候, 如果在当前类中没有找到此方法, 那么就到当前类的父类中去寻找, 如果在父类中没有找到, 那么就去父类的父类中去寻找, 一直找到 NSObject 都没有这个方法, 就会报

66820

神经病院Objective-C Runtime入院第一天—isa和Class

前言 我第一次开始重视Objective-C Runtime是从2014年11月1日,@唐巧老师在微博上发的一条微博开始。 ? 这是sunnyxx在线下的一次分享会。会上还给了4道题目。 ?...希望看完我这次的总结,心中能解开一些疑惑。...通过 Objective-C 源代码 一般情况开发者只需要编写 OC 代码即可,Runtime 系统自动在幕后把我们写的源代码在编译阶段转换成运行时代码,在运行时确定对应的数据结构和调用具体哪个方法。...obj被转换成了一个指向Sark Class的指针,然后使用id转换成了objc_object类型。obj现在已经是一个Sark类型的实例对象了。当然接下来可以调用speak的方法。...很多人可能会认为会输出sark相关的信息。这样答案就错误了。

80530
  • Objective-C关于id引发的一些思考 原

    在初学这门语言时,我常常从意识上将NS开头的类型与C语言原本的那些类型分割开来,假装他们之间没有联系,只关注“类”的世界。...typedef struct objc_object *id; 二、关于void与void*     在开发中,void用的最多的地方要数标记Objective-C无返回值的函数,Objective-C...这里和id很像对不对,虽然id描述的是Objective-C对象但是本质也是指针,那么根据我们的推测,id类型的数据和void*类型的数据是可以进行类型转换的。...三、ARC中用__bridge的应用     前面说过,由于ARC的原因,导致无法在Objective-C对象与C指针类型之间进行直接转换,但是可以通过__bridge来转换,从字面理解,__bridge...withObject:(id)object2; 虽然我们也可以用其他方式来达到相同的效果,比如修改原函数的参数类型,或者使用NSInvocation来发送消息,一种更简便的方式如下: - (void)

    1.1K60

    【IOS开发高级系列】Objective-c Runtime专题总结

    这个时候我们知道Objective-C中的object在最后会被转换成C的结构体Class,而在这个struct中有一个 isa 指针,指向它的类别 Class(PS:这里还不是Meta Class)。...然后使用id转换成了objc_object类型。...2) 为什么self.name的输出为?         ...我们可以实现 forwardInvocation: 方法来对不能处理的消息做一些默认的处理,也可以将消息转发给其他对象来处理,而不抛出错误。        ...它可以将一个消息翻译成另外一个消息,或者简单的”吃掉“某些消息,因此没有响应也没有错误。 forwardInvocation: 方法也可以对不同的消息提供同样的响应,这一切都取决于方法的具体实现。

    38130

    Objective-C RunTime概览

    在消息发送的过程中,这三个概念是可以互相转换的。...所以,最后的接收器还是self。 因此,上述打印结果的值是一样的。 消息的传递流程 关于OC中的消息传递流程,画了一张图以帮助理解(流程由下往上): ?...消息传递流程 Objective-C的消息传递流程,个人划分为三部分: 正常的消息传递(Messaging) 消息动态解析(Dynamic Method Resolution) 消息转发(Message...Runtime应用 1.获取类的相关情况 比如,我想创建一个类似UITableView的类,然后打算参考一下官方的这个类都声明了哪些方法,可以用以下方式查看(头文件声明的方法并不是全部方法):...不过: Objective-C的Runtime就像一把双刃剑,使用它,风险高,回报也高。它赋予你很大的权力,但只要你犯了哪怕一丁点儿错误,都有可能让程序挂掉。 所以,总原则:能不用,尽量不用。

    67630

    深入浅出 Runtime(二):数据结构

    1. objc_object Objective-C的面向对象都是基于C/C++的数据结构——结构体实现的。...我们平时使用的所有对象都是id类型,id类型对象对应到runtime中,就是objc_object结构体。...,请查看: 深入浅出 Runtime(三):消息机制 3. isa 指针 isa指针用来维护对象和类之间的关系,并确保对象和类能够通过isa指针找到对应的方法、实例变量、属性、协议等; 在 arm64...,把一个方法的返回值类型、参数类型通过字符串的形式描述; @encode()指令可以将类型转换为 Type Encodings 字符串编码, 如@encode(int)=i; OC方法都有两个隐式参数...Objective-C type encodings Type Encodings 在runtime的消息转发中会使用到; 更多关于 Type Encodings 的内容,可以查看官方文档 Type Encodings

    82910

    iOS开发·runtime原理与实践: 基本知识篇(类,超类,元类,super_class,isa,对象,方法,SEL,IMP)

    库函数的直接调用 1.2 各种基本概念的C表达 在 Objective-C 中,类、对象和方法都是一个 C 的结构体,从 objc/objc.h(对象,objc_object,id)以及objc/runtime.h...任何带有以指针开始并指向类结构的结构都可以被视作objc_object, 对象最重要的特点是可以给其发送消息。...另外我们常见的id类型,它是一个objc_object结构类型的指针。该类型的对象可以转换为任何一种对象,类似于C语言中void *指针类型的作用。...所以由上图可以看到,在给实例对象或类对象发送消息时,寻找方法列表的规则为: 当发送消息给实例对象时,消息是在寻找这个对象的类的方法列表(实例方法) 当发送消息给类对象时,消息是在寻找这个类的元类的方法列表...为什么转换?这是因为objc_getAssociatedObject的参数要求的。

    1.7K40

    类与对象

    在一些结构较为复杂的类关系中,一个对象的响应方法可能来自于继承的类结构中,此情况下查找相应的响应方法时就会比较耗时,通常使用cache缓存可以减低查找时间; version 该字段可以获取类的版本信息,...类的实例数据结构 在 Objective-C 中类的实例的数据结构是定义在struct objc_object 中(objc/objc.h): /// Represents an instance of...当我们向一个类的实例发送消息时,Runtime会根据实例对象的isa找到这个实例对象所属的类,然后再在这个类的方法列表和其父类的方法列表中查找与消息相对应的selector指向的方法,进而执行目标方法。...当创建某一个类的实例时,分配的内存中会包含一个objc_object数据结构,然后是类的实例变量的相关数据。 我们常见的id是一个struct objc_object类型的指针。...id 类型的对象可以转换为任何一种类型的对象,它的作用有点类似 C 语言中的 void * 指针类型。

    92030

    图解Objective-C对象模型

    [ 一张来自官方文档的对象结构图 ] 这个图也大致涵盖了Objetive-C对象的主要内容,这里出现了实例变量,指向对象类结构的isa指针,类结构中的selector(运行时将 转变为IMP(方法实现)...T_ _T ,我感觉第一个感觉比第二好用,对头,我也是这么认为的。毕竟现在还不了解Objetive- C对象模型,消息发送机制,这个直观的感觉很正常。但是苹果到底为你做了多少了?...之后讲block的实质的时候就会看到其本质就是Objective-C对象。...我想下面这张图,你默默的看个几分钟,就能解之前的疑惑了,心中的草泥马终于可以释怀了。 ?...类对象中有你定义的实例方法的引用,而元类中有对类方法的引用,使得你可以对类对象(ClassObject)发消息。 这里出两道题,来自sunny的博客。挑两道较好的,刚好与类的对象模型相关。

    1.3K90

    iOS常见问题

    在Objective-C中,runtime会自动调用每个类的两个方法。...为什么其他语言里叫函数调用, objective c里则是给对象发消息(或者谈下对runtime的理解) 先来看看怎么理解发送消息的含义: 曾经觉得Objc特别方便上手,面对着 Cocoa 中大量 API...还记得初学 Objective-C 时把[receiver message]当成简单的方法调用,而无视了“发送消息”这句话的深刻含义。...id是一个objc_object结构类型的指针,这个类型的对象能够转换成任何一种对象。...以上这句是我从其他文章转过来的,其实这样说是错误的,不准确的:   (1).首先是”GET方式提交的数据最多只能是1024字节”,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了

    65930

    iOS开发-Runtime详解

    也就是说,有很多类和成员变量在我们编译的时是不知道的,而在运行时,我们所编写的代码会转换成完整的确定的代码运行。...代码转换成运行时代码,在运行时确定数据结构和函数。...我将会参考苹果官方的 API 文档。 ---- 一些 Runtime 的术语的数据结构 要想全面了解 Runtime 机制,我们必须先了解 Runtime 的一些术语,他们都对应着数据结构。...定义如下: typedef struct objc_object id; struct objc_object { Class isa; };* 以上定义,看到 objc_object 结构体包含一个...我们可以实现 forwardInvocation: 方法来对不能处理的消息做一些处理。也可以将消息转发给其他对象处理,而不抛出错误。 注意:参数 anInvocation 是从哪来的?

    73690

    iOS开发-Runtime详解

    也就是说,有很多类和成员变量在我们编译的时是不知道的,而在运行时,我们所编写的代码会转换成完整的确定的代码运行。...代码转换成运行时代码,在运行时确定数据结构和函数。...我将会参考苹果官方的 API 文档。 ---- 一些 Runtime 的术语的数据结构 要想全面了解 Runtime 机制,我们必须先了解 Runtime 的一些术语,他们都对应着数据结构。...定义如下: typedef struct objc_object id; struct objc_object { Class isa; };* 以上定义,看到 objc_object 结构体包含一个...我们可以实现 forwardInvocation: 方法来对不能处理的消息做一些处理。也可以将消息转发给其他对象处理,而不抛出错误。 注意:参数 anInvocation 是从哪来的?

    73470

    RunTime 之使用前须知

    IMP 具体的方法的地址。 消息机制 动态特性 在Objective-C中,任何类的定义都是对象。类和类的实例(对象)没有任何本质上的区别。 任何对象都有isa指针。...如何理解消息机制: (1)在Objective-C中,message与方法是在执行阶段绑定的,而不是编译阶段。...(比如.h中声明了方法,但.m中没有实现,就可以重现这个错误) 在 Objective-C 语言中,每一个类实际上也是一个对象。每一个类也有一个名为 isa 的指针。...#在确定对象为某类成员后,可以安全地进行强制转换,继续之后的工作。 动态绑定 基于动态类型,在某个实例对象被确定后,其类型便被确定了。该对象对应的属性和响应的消息也被完全确定,这就是动态绑定。...在继续之前,需要明确Objective-C中 消息 的概念。

    73420

    Objective-C Runtime:深入理解类与对象

    类的实例数据结构 在 Objective-C 中类的实例的数据结构是定义在struct objc_object 中(objc/objc.h): /// Represents an instance of...当我们向一个类的实例发送消息时,Runtime会根据实例对象的isa找到这个实例对象所属的类,然后再在这个类的方法列表和其父类的方法列表中查找与消息相对应的selector指向的方法,进而执行目标方法。...我们常见的id是一个struct objc_object类型的指针。id类型的对象可以转换为任何一种类型的对象,它的作用有点类似 C 语言中的 void * 指针类型。.../// A pointer to an instance of a class. typedef struct objc_object *id; 相关函数 Objective-C的Runtime我们提供了很多运行时状态跟类与对象相关的函数...这种情况下,我们没有办法直接转换,因为B类的实例会比A类的实例更大,没有足够的空间来放置对象。

    1.3K40

    Objective-C Runtime详解

    Objective-C Runtime 最近在学习Runtime的知识,恰巧发现了这篇博客《Objective-C Runtime》,在此基础上,进行了些许补充说明,如有错误或其他想法,欢迎提出交流。...*id; 那objc_object又是啥呢: struct objc_object { Class isa; }; objc_object结构体包含一个isa指针,根据isa指针就可以顺藤摸瓜找到对象所属的类...中_class_lookupMethodAndLoadCache3(为什么有个这么奇怪的方法。...我们可以实现forwardInvocation:方法来对不能处理的消息做一些默认的处理,也可以将消息转发给其他对象来处理,而不抛出错误。...它可以将一个消息翻译成另外一个消息,或者简单的”吃掉“某些消息,因此没有响应也没有错误。forwardInvocation:方法也可以对不同的消息提供同样的响应,这一切都取决于方法的具体实现。

    1.8K60

    AutoreleasePool的那些事

    让我们转成.cpp看下: xcrun --sdk iphoneos clang -arch arm64 -rewrite-objc main.m 复制代码 转换成c++后是 int main(int...具体为什么要又区分不是特别理解… 到此push与pop就已经说完了。...(引用iOS Objective-C底层 part3:live^ARC ) 最后琐事 使用容器的block版本的枚举器时,内部会自动添加一个AutoreleasePool: [array enumerateObjectsUsingBlock...不过不知道是不是我理解的问题,我在代码中没有看到block中有autoreleasepool 在main写了如下代码 编译成汇编后,并没有看到 autoreleasepool的身影 然后在...push,结束的时候去pop但是真的深入就不了解了,此处暂且存疑,待日后修炼归来再来解答 ---- 文章参考: 黑幕背后的Autorelease iOS Objective-C底层 part3:

    30820

    Objective-C Runtime 详解

    前言 最近在学习Runtime的知识,恰巧发现了这篇博客《Objective-C Runtime》,在此基础上,进行了些许补充说明,如有错误或其他想法,欢迎提出交流。...*id; 那objc_object又是啥呢: struct objc_object { Class isa; }; objc_object结构体包含一个isa指针,根据isa指针就可以顺藤摸瓜找到对象所属的类...中_class_lookupMethodAndLoadCache3(为什么有个这么奇怪的方法。...我们可以实现forwardInvocation:方法来对不能处理的消息做一些默认的处理,也可以将消息转发给其他对象来处理,而不抛出错误。...它可以将一个消息翻译成另外一个消息,或者简单的”吃掉“某些消息,因此没有响应也没有错误。forwardInvocation:方法也可以对不同的消息提供同样的响应,这一切都取决于方法的具体实现。

    1.2K20

    iOS运行时Runtime基础

    在网上也看过很多资料,最终我还是希望在一些关键的知识点上能够融入自己的理解,从简单的问题出发,一步一步理解和学以致用。 ?...作为大部分Objective-C类继承体系的根类的NSObject,其本身就具有了一些非常具有运行时动态特性的方法,比如respondsToSelector:方法可以检查在代码运行阶段当前对象是否能响应指定的消息...Objective-C在编译时,会依据每一个方法的名字、参数序列,生成一个唯一的整型标识(Int类型的地址),这个标识就是SEL。 注意: 1.不同类中相同名字的方法对应的方法选择器是相同的。...:方法,但是NSObject中的这个方法只是简单的调用了doesNotRecongnizeSelector:方法,提示我们错误。...所以我们可以重写这个方法:对不能处理的消息做一些默认处理,也可以将消息转发给其他对象来处理,而不抛出错误。

    93430

    runtime的那些事(一)——runtime基础介绍

    若消息转发也没有实现,则会报错消息无法识别、方法找不到错误unrecognzied selector sent to instance并程序 Crash ---- 五、动态解析与消息转发 之前让我能够快速理解动态解析与消息转发流程...通过下面这张图可以更好地理解 isa指针在类中向上传递查找顺序,也正好佐证了上述类方法在动态解析过程为什么执行了两次。 ? isa指针查找顺序图 2....接下来会执行- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector函数,去询问该消息是否有效,并尝试让其生成一个函数的签名,若签名无效返回...,将对象、方法选择器、参数以及返回值等各种信息,都封装到此类的对象中,再通过invoke函数去执行被调用函数,其思想本质是命令者模式的展现。...消息转发小扩展——实现Objective-C 多继承 利用消息转发可以实现 Objective-C 语言编程的多继承效果。

    1.6K20
    领券