iOS root class

问题来源:

常见面试问题之:

NSObject和NSObject protocol有什么区别,为什么要有NSObject protocol, 有没有不继承自NSObject的类?

虽然在iOS开发过程中所用到的几乎所有的类都派生自NSObject, 但Cocoa并不是只有一个NSObject这一个root class. 另一个典型的root class就是NSProxy. 这也就是为什么同时需要定义NSObject类和NSObject协议. 那些不是从NSObject派生的类,也可以实现NSObject protocol的. 也就是说,NSObject class和NSObject protocol本身是相互独立的,按照正常的对类的理解和对协议的理解去理解这个事情就可以了。当然,NSObject protocol协议存在的必要性就是因为不是所有的类都派生自NSObject.

在NSProtocol的定义中有如下的方法:

- (BOOL)isProxy;

这个方法就可以用来判断这个类是否是从其他的根类派生.

文档描述如下:


- (BOOL)isProxy


Description


Returns a Boolean value that indicates whether the receiver does not descend from NSObject. (required)


This method is necessary because sending isKindOfClass: or isMemberOfClass: to an NSProxy object will test the object the proxy stands in for, not the proxy itself. Use this method to test if the receiver is a proxy (or a member of some other root class).


Returns


NO if the receiver really descends from NSObject, otherwise YES.

至于NSProxy本身,一般iOS开发中会比较少用。NSProxy可以用来实现代理模式和模拟多继承;具体的可以参见如下的博文:

使用NSProxy实现代理模式 : http://blog.csdn.net/onlyou930/article/details/7548476

使用NSProxy实现消息转发机制,模拟多重继承http://blog.csdn.net/onlyou930/article/details/7548634

另有如下文章详细的描述NSObject class与NSObject protocol的,我比较懒,就直接贴链接了:

原文:NSObject: the Class and the Protocol https://mikeash.com/pyblog/friday-qa-2013-10-25-nsobject-the-class-and-the-protocol.html

译文:http://my.oschina.net/yongbin45/blog/202535

时间: 2024-10-11 18:25:51

iOS root class的相关文章

使用 Dom4j 对XML操作!!!

转自:http://blog.csdn.net/redarmy_chen/article/details/12969219 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它. 对主流的Java XML API进行的性能.功能和易用性的评测,dom4j无论在那个方面都是非常出色的.如今你可以看到越来越

JAVA用dom4j对xml的解析

一.DOM4j中,获得Document对象的方式有三种: [java] view plain copy 1.读取XML文件,获得document对象 SAXReader reader = new SAXReader(); Document   document = reader.read(new File("csdn.xml")); 2.解析XML形式的文本,得到document对象. String text = "<csdn></csdn>"

xml 解析 java 基础复习

document  解析 sax  解析 dom4j 解析(摘自csdn redarmychen) dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它. 对主流的Java XML API进行的性能.功能和易用性的评测,dom4j无论在那个方面都是非常出色的.如今你可以看到越来越多的Java软件都在使用

dom4j操作xml的demo

package com.cn.shop.util; import java.io.File;import java.io.FileOutputStream;import java.io.OutputStreamWriter;import java.util.Iterator;import java.util.List; import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;i

使用dom4j对xml操作【转】

dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它. 对主流的Java XML API进行的性能.功能和易用性的评测,dom4j无论在那个方面都是非常出色的.如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j. 使用

发布测试版本,通过网页在线安装ipa和apk

很多时候我们需要发布一个测试版本,如果发布为安装包,让测试人员自己安装的话,很多时候是非常困难麻烦的,尤其是iOS版本,多数人并不知道除AppStore之外的安装方式. 通过网页在线安装可以达成自动化部署,终端测试用户只需要通过页面下载安装即可.也可以免去发包给发行商的步骤,分享一个链接地址,他们点击链接即可完成安装. Android版本很好处理,只需要部署好一台静态文件服务器,Android设备都可以自己下载安装.这里主要说明iOS的在线安装方式. iOS在线安装的步骤简单来说就是部署一台ht

unity3d编辑器系列——独立的编辑器界面

好多东西直接记在云笔记上,好久没有写博客了,新年分享一下. body,td { font-family: 微软雅黑; font-size: 14pt } 写在前面: 前段时间看了E神的框架,各种膜拜,学到了很多东西.&最近工作中要写很多的工具,用到的编辑器的地方比较多,也正好学习了一下编辑器的知识.当然,这次学习的只是编辑器中的很小的一部分,先进行一下记录,以后有事件再进行补充. 直观感受:编辑器的部分并没有什么太难的地方,和写ongui的ui比较像 下面贴出代码和对应的界面: 例子一: 界面代

Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo

更新了xcode后使用goland运行项目时提示 Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo 更具提示打开xcode 点击agree安装即可!

IOS AppDelegate设置Root页面

1.最简单的只有一个控制器的root页面(不用默认的storyrboard) AppDelegate.m #import "AppDelegate.h" #import "KCMainViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchin