首页
学习
活动
专区
工具
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程序都是由大量对象构成,而这些对象对象绝大多数是NSObjectNSObject就处在Foundation框架之中,也可理解为Foundation...通常我们会将他们分为几类: 值对象 集合 操作系统服务:文件系统、URL、进程通讯 通知 归档和序列化 表达式和条件判断 Objective-C语言服务 NSObject Objective-C NSObject...在Objective-C,类也是用对象来表示,而类isa指针指向它metaclass(存储静态成员变量和类方法)。 super_class指针:指向父类。 name:类名称。...,为处理响应事件和响应链,是NSObject图中最大分支类。

    7.5K21

    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第一次指向NSObjectMeta Class,接着执行superclass时,元类NSObjectMeta 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元类对象

    53810

    类与对象

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

    90630

    ARKit和CoreLocation:第三部分

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

    60420

    RunTime 之使用前须知

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

    72720

    Objective-C Runtime编程指南(1)

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

    79020

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

    iOS底层—OC对象本质与isa

    isa均继承自NSObject,也就是来自objc_object结构体; Objective-CNSObject是大多数类类,而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类。

    53910

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

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

    81040

    ios开发Runtime详解part1

    就像我们开发或者运行java程序需要安装jdk一样,使用Objective-C编写程序也需要在一个特定环境下才能运行,这个环境就是Objective-C runtime system, 程序运行时候可以动态载入类以及向其他对象发送消息...鉴于很多文章已经对官方文档进行了翻译,我这里着重总结一下runtime在实际场景下应用: 1、Introspection, 获得对象信息,Class, Selector(SEL), Method...:[NSObject class]]); // 输出: Kind of NSObject: 1 RuntimeObject是NSObject子类,所以是NSObject 执行这个对象方法:...Objective-C发送消息步骤为: 1、向对象发送了一个消息,每一个类会有一个isa指针指向这个类结构体(structure),在结构体中会有一个 dispatch table, 包含这个类...: void (*setter)(id, SEL, NSInteger); int i; // ro是之前创建RuntimeObject对象 setter = (void (*)(id, SEL

    31220

    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.7K60

    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
    领券