首页
学习
活动
专区
工具
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 都没有这个方法, 就会报

65420

神经病院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相关信息。这样答案就错误了。

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

    36030

    Objective-C RunTime概览

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

    65130

    深入浅出 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

    78110

    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.6K40

    类与对象

    在一些结构较为复杂类关系中,一个对象响应方法可能来自于继承类结构中,此情况下查找相应响应方法时就会比较耗时,通常使用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 * 指针类型。

    90730

    图解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长度有直接关系了

    64930

    iOS开发-Runtime详解

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

    71890

    iOS开发-Runtime详解

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

    72770

    RunTime 之使用前须知

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

    72720

    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-CRuntime我们提供了很多运行时状态跟类与对象相关函数...这种情况下,我们没有办法直接转换,因为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.7K60

    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:

    29820

    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:方法,提示我们错误。...所以我们可以重写这个方法:对不能处理消息做一些默认处理,也可以将消息转发给其他对象来处理,而不抛出错误

    91430

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

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

    1.4K20
    领券