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

如何在没有NSObject的Objective-C中创建根对象?

在Objective-C中,可以使用NSObject的子类来创建一个根对象。但是,如果你想在没有NSObject的情况下创建一个根对象,可以使用objc_getClass("NSObject")方法来获取NSObject的类对象,然后使用allocinit方法创建一个实例。

以下是一个示例代码:

代码语言:objective-c
复制
id rootObject = [[objc_getClass("NSObject") alloc] init];

这段代码将创建一个NSObject的实例,并将其赋值给rootObject变量。由于NSObject是所有Objective-C对象的根类,因此这个实例可以被视为一个根对象。

需要注意的是,虽然这种方法可以创建一个类似于根对象的实例,但是它并不是一个真正的根对象,因此可能会出现一些不可预知的问题。如果可能的话,最好还是使用NSObject或其子类来创建根对象。

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

相关·内容

如何在Android中避免创建不必要的对象

在编程开发中,内存的占用是我们经常要面对的现实,通常的内存调优的方向就是尽量减少内存的占用。这其中避免创建不必要的对象是一项重要的方面。...因此在我们编程时,需要注意到这一点,正确地声明变量类型,避免因为自动装箱引起的性能问题。 另外,当将原始数据类型的值加入集合中时,也会发生自动装箱,所以这个过程中也是有对象创建的。...关于Java中的自动装箱与拆箱,参考文章Java中的自动装箱与拆箱 谨慎选用容器 Java和Android提供了很多编辑的容器集合来组织对象。...不要过多创建线程 在android中,我们应该尽量避免在主线程中执行耗时的操作,因而需要使用其他线程。...想要深入了解注解,可以阅读详解Java中的注解 选用对象池 在Android中有很多池的概念,如线程池,连接池。包括我们很长用的Handler.Message就是使用了池的技术。

2.5K20
  • 类的本质-类对象

    1.本质 类的本质其实也是一个对象(类对象) 程序中第一次使用该类的时候被创建,在整个程序中只有一份。 此后每次使用都是这个类对象,它在程序运行时一直存在。...,所有事物都应该是对象(严格来说 Objective-C并没有完全做到这一点,因为它有象int,double这样的简单 变量类型) 在Objective-C语言中,每一个类实际上也是一个对象。...根元类(root metaclass)本身的isa指针指向自己,这样就行成了一个闭环。上面说?到,一个对象能够接收的消息列表是保存在它所对应的类中的。...由于类方法的定义是保存在元类(metaclass)中,而方法调用的规则是,如果该类没有一个方法的实现,则向它的父类继续查找。...NSObject的元对象继承自NSObject类。 一个NSObject的类中的方法同时也会被NSObject的子类在查找方法时找到。

    9.3K50

    iOS系统架构及常用框架

    当引入此头文件后,便可以在程序里使用任何在UIKit里声明的类 CoreGraphics 它是iOS的核心图形库,平时使用最频繁的point,size,rect等这些图形,都定义在这个框架中,类名以CG...Foundation框架 所有的Mac OS X和IOS程序都是由大量的对象构成,而这些对象的根对象绝大多数是NSObject,NSObject就处在Foundation框架之中,也可理解为Foundation...通常我们会将他们分为几类: 值对象 集合 操作系统服务:文件系统、URL、进程通讯 通知 归档和序列化 表达式和条件判断 Objective-C语言服务 NSObject Objective-C 中 NSObject...在Objective-C中,类也是用对象来表示的,而类的isa指针指向它的metaclass(存储静态成员变量和类方法)。 super_class指针:指向父类。 name:类名称。...,为处理响应事件和响应链,是NSObject图中最大分支的根类。

    7.8K21

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

    同时,在Objective-C语言中,类本身也是一个对象,类作为对象时isa指针指向元类(Meta Class),后面会详解; super_class:指向该类的父类,如果该类已经是根类(NSObject...objc_ivar结构体的指针(Ivar); class_getClassVariable函数,目前没有找到关于Objective-C中类变量的信息,一般认为Objective-C不支持类变量。...类B通过添加一些额外的属性来扩展类A。现在我们创建了一个A类的实例对象,并希望在运行时将这个对象转换为B类的实例对象,这样可以添加数据到B类的属性中。...这种情况下,我们没有办法直接转换,因为B类的实例会比A类的实例更大,没有足够的空间来放置对象。...; 在result2中,isKindOf第一次指向NSObject的Meta Class,接着执行superclass时,根元类NSObject的Meta Class根据上面所讲的其superclass

    1.3K40

    iOS-class方法和objc_getClass方法

    一、Object(objc实例对象),Class(类),Metaclass(元类),Rootclass(根类),Rootclass‘s metaclass(根元类) 首先说下Objective-C中类的几种数据结构...;在Objective-C的类型结构中,Object(实例),Class(类),Metaclass(元类),Rootclass(根类),Rootclass‘s metaclass(根元类),且这些都是对象...2、obj为Class类对象 在Objective-C中,任何类的定义都是对象(除了int、char等这些基本类型)。类和类的实例(对象)没有任何本质上的区别。任何对象都有isa指针。...)和元类对象(Class peopleMeta); 注:实例对象通过calloc可创建多个,但类对象和元类对象在内存中只有一份,只创建一次; 2、对象的本质,其实是C语言的结构体struct,各个对象的内存结构为...指针+仅存储类方法; 3、isa指向: people:指向类对象People; People:指向元类对象peopleMeta; peopleMeta:指向基类(Root,如:NSObject)的元类对象

    60710

    类与对象

    其中,对象是类的实例,是通过类数据结构的定义创建出来的,对象的isa指针是指向其所属类的。...同时,在Objective-C语言中,类本身也是一个对象,类作为对象时isa指针指向元类(Meta Class),后面会详解; super_class 指向该类的父类,如果该类已经是根类(NSObject...类的名称设置为Cat时,创建出的Class的地址始终指向0x0,创建类失败,猜测其中的原因可能是Cat与内部的关键字冲突了,导致类创建失败,改为cat或者其他的都可以创建成功; 在上面的代码中,在运行时动态创建了...; 在result2中,isKindOf第一次指向NSObject的Meta Class,接着执行superclass时,根元类NSObject的Meta Class根据上面所讲的其superclass...小结 在这一章中我们介绍了Runtime运行时中与类和对象相关的数据结构,通过这些数据函数,我们可以学习Objective-C底层面向对象实现的一些信息。

    91930

    ARKit和CoreLocation:第三部分

    在第一部分中,我们介绍了ARKit的基础知识并放置了对象,在第二部分中,我们想出了如何计算我们需要进行旅行的坐标以及如何将这些位置从二维图转换为三维图真实世界。 现在是时候应用我们学到的东西了。...回归到NS类可能听起来很奇怪,但由于Objective-C中的所有内容都继承自NSObject,而Apple的使命是使Swift和Objective-C尽可能兼容,你会看到NSObject不时弹出。...定义 NSObjectProtocol:所有Objective-C对象符合的基本协议。 NSObject:大多数Objective-C类的基类。...继承自NSObject为子类提供了系统运行时的接口和Objective-C对象的基本行为。...Cocoa根类NSObject采用此协议,因此从中继承的所有对象NSObject 都具有此协议描述的功能。

    1K20

    神奇的Runtime

    struct objc_class *super_class;  //指向父类,如果该类已经是最顶层的根类(如 NSObject 或 NSProxy),那么 super_class 就为 NULL.     ...所有的元类最终继承一个根元类,根元类isa指针指向本身,形成一个封闭的内循环 superclass指向该类的父类, 如果该类已经是最顶层的根类(如 NSObject 或 NSProxy),那么 super_class...有趣的是根元类的超类是NSObject,而isa指向了自己,而NSObject的超类为nil,也就是它没有超类。...2、KVO 当某个类的对象第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的 setter 方法。...:通知观察者 4、当一个property没有观察者时,删除重写的方法 5、当没有observer观察任何一个property时,删除动态创建的子类 七、Method Swizzling原理 在Objective-C

    61720

    RunTime 之使用前须知

    IMP 具体的方法的地址。 消息机制 动态特性 在Objective-C中,任何类的定义都是对象。类和类的实例(对象)没有任何本质上的区别。 任何对象都有isa指针。...根元类 (root metaclass) 本身的 isa 指针指向自己,这样就行成了一个闭环。上面提到,一个对象能够接收的消息列表是保存在它所对应的类中的。...“一些”对象会使用其 isa 指针的一部分空间来存储它的引用计数 isa是一个Class 类型的指针,通过一个实例对象(Object)的isa,我们可以找到一个对象的所以信息,如类属性的结构,类方法(...(比如.h中声明了方法,但.m中没有实现,就可以重现这个错误) 在 Objective-C 语言中,每一个类实际上也是一个对象。每一个类也有一个名为 isa 的指针。...在继续之前,需要明确Objective-C中 消息 的概念。

    73420

    Objective-C Runtime编程指南(1)

    它还提供了有关如何在程序运行时查找有关对象的信息的信息。...您只需编写和编译Objective-C源代码即可使用它。 编译包含Objective-C类和方法的代码时,编译器将创建实现该语言动态特性的数据结构和函数调用。...他们被认为是“隐藏的”,因为他们没有在定义方法的源代码中声明。 编译代码时将它们插入到实现中。 虽然这些参数没有明确的声明,但源代码仍然可以引用它们(就像它可以引用接收对象的实例变量一样)。...同时,为了使应用程序中的其他对象正常工作,至少需要该对象的占位符。 在这种情况下,你最初可以创建,而不是完整的对象,而是一个轻量级的替代品。...当代理的forwardInvocation:方法首先收到发往其他对象的消息时,它将确保该对象存在,如果没有,则会创建该消息。

    82120

    16道面试官必问你必须会的iOS面试题

    我个人觉得是,当时市面上并没有别的面向对象语言的设计参考,而 Objective-C 「发明」了方括号的形式来给对象发消息,而 C++ 则「发明」了用点的方式来 “发消息”。...在本例中,如果 block 执行中的代码是通过参数传递进来的话,似乎并没有什么办法可以修改它了。 题目 10:一个 Objective-C 对象的内存结构是怎样的?...题目 11:Objective-C 对象内存结构中的 isa 指针是用来做什么的,有什么用? Objective-C 是一门面向对象的编程语言。每一个对象都是一个类的实例。...NSObject 的元类继承自 NSObject 类,所以 NSObject 类是所有类的根,因此 NSObject 中定义的实例方法可以被所有对象调用,例如 - (id)init 方法 和 - (void...所以,GC 将内存中的对象主要分成两个区域:Young 区和 Old 区。对象先在 Young 区被创建,然后如果经过一段时间还存活着,则被移动到 Old 区。

    2.7K50

    动态的Objective-C——关于消息机制与运行时的探讨

    ,在Objective-C库头文件中没有找到objc_selector结构体的定义,但我们可以合理猜测,其中很有可能包含的是一个函数指针。...上面我们介绍的消息发送机制其实十分不完整,首先Objective-C是支持继承的,因此如果在当前对象的类的方法列表中没有找到此消息对应的方法签名,系统会通过super_class一层层继续向上,直到找到相应的方法或者到达继承链的顶端...,Objective-C会将当前对象无法处理的消息转发给这个方法返回的对象,如果返回nil,则表示不进行消息转发,这时你如果还想挽救此次crash,你就需要用到第三根救命稻草了。...类中也没有className函数的实现,会继续向上,最终在NSObject类中找到这个方法,记住,这条消息处理的两个要素是:当前MyObjectSon实例对象作为接收者,NSObject类中的className...如此来看一些都清楚了,系统首先从MyObject类中找className方法,没有相应的实现,会继续向上直到找到NSObject类中的className方法,之后进行执行。

    83140

    iOS底层—OC对象的本质与isa

    isa均继承自NSObject,也就是来自objc_object结构体; Objective-C中NSObject是大多数类的根类,而objc_object可以理解为就是c\c++层面的根类。...isa的类型为Class,被定义为指向objc_class的指针。 在开发中可以用id来表示任意对象,根本原因就是id被定义为指向objc_object的指针,也就指向NSObject的指针。...对象本质总结 通过工具clang,编译生成的cpp文件,我们可以发现,对象实质是一个结构体。在OC层,NSObject是大多数类的根类,而objc_object可以理解为就是c\c++层面的根类。...,isa中包含了类信息、对象的引⽤计数等。...isa初始化流程结束,我们可以通过创建的gf对象反推isa指向的是否为GFPerson类。

    55810

    Objective-C Runtime详解

    不知道你是否注意到了objc_class中也有一个isa对象,这是因为一个 ObjC 类本身同时也是一个对象,为了处理类和对象的关系,runtime 库创建了一种叫做元类 (Meta Class) 的东西...记住,当一个消息发送给任何一个对象, 方法的检查 从对象的 isa 指针开始,然后是父类。实例方法在类中定义, 类方法 在元类和根类中定义。(根类的元类就是根类自己)。...有趣的是根元类的超类是NSObject,而isa指向了自己,而NSObject的超类为nil,也就是它没有超类 Method Method是一种代表类中的某个方法的类型。...方法中的隐藏参数 我们经常在方法中使用 self 关键字来引用实例本身,但从没有想过为什么 self 就能取到调用当前方法的对象吧。...实际上,它是在方法实现中访问消息接收者对象的实例变量的途径 而当方法中的 super 关键字接收到消息时,编译器会创建一个 objc_super 结构体: struct objc_super { id

    1.8K60

    2020-iOS最新面试题解析—1(原理篇)

    ,指向他的类对象,类对象中存放着本对象的如下信息 对象方法列表 成员变量的列表 属性列表 每个 Objective-C 对象都有相同的结构,如下图所示 | Objective-C 对象的结构图 | |...--- | | ISA指针 | | 根类(NSObject)的实例变量 | | 倒数第二层父类的实例变量 | | ... | | 父类的实例变量 | | 类的实例变量 | 根类对象就是NSObject,...元类内部存放的是类方法列表,根元类的isa指针指向自己,superclass指针指向NSObject类 一个objc对象的isa的指针指向什么?有什么作用?...NSObject 调 -dealloc * 只做一件事:调用 Objective-C runtime 中的 object_dispose() 方法 4\....unrecognized selector的异常》中的说明 补充说明:Runtime 铸就了Objective-C 是动态语言的特性,使得C语言具备了面向对象的特性,在程序运行期创建,检查,修改类、对象及其对应的方法

    1.7K21
    领券