这篇文章我们对面试题题目是这样的:

相关源码:

objc4_752源码

isa走位图:

int main(int argc, const char * argv[]) {@autoreleasepool {// insert code here...BOOL re1 = [(id)[NSObject class] isKindOfClass:[NSObject class]];BOOL re2 = [(id)[NSObject class] isMemberOfClass:[NSObject class]];BOOL re3 = [(id)[XZPerson class] isKindOfClass:[XZPerson class]];BOOL re4 = [(id)[XZPerson class] isMemberOfClass:[XZPerson class]];NSLog(@" \nre1 :%hhd\n re2 :%hhd\n re3 :%hhd\n re4 :%hhd\n",re1,re2,re3,re4);BOOL re5 = [(id)[NSObject alloc] isKindOfClass:[NSObject class]];BOOL re6 = [(id)[NSObject alloc] isMemberOfClass:[NSObject class]];BOOL re7 = [(id)[XZPerson alloc] isKindOfClass:[XZPerson class]];BOOL re8 = [(id)[XZPerson alloc] isMemberOfClass:[XZPerson class]];NSLog(@" \nre5 :%hhd\n re6 :%hhd\n re7 :%hhd\n re8 :%hhd\n",re5,re6,re7,re8);}return 0;
}

问这个的输出结果:

首先这个我们需要分析,这个其实主要考察的就是

  1. 类方法 isKindOfClass主要判断什么
  2. 类方法isMemberOfClass主要判断什么
  3. 实例方法 isKindOfClass主要判断什么
  4. 实例方法isMemberOfClass主要判断什么

1.首先我们来看isKindOfClass类方法源码:

//    元类   VS  类for (Class tcls = object_getClass((id)self); tcls; tcls = tcls->superclass) {if (tcls == cls) return YES;}return NO;
}
//获取元类
Class object_getClass(id obj)
{if (obj) return obj->getIsa();else return Nil;
}

元类tcls和类cls进行对比,如果不匹配会循环元类的父类和类(元类的父类可以根据isa走位图进行查看)进行对比;(元类的父类,最终会找到NSObject)

可以得出: re1 = 1 ,re3 = 0;

2.继续分析isMemberOfClass类方法

+ (BOOL)isMemberOfClass:(Class)cls {
//     元类  VS  类return object_getClass((id)self) == cls;
}
/
Class object_getClass(id obj)
{if (obj) return obj->getIsa();else return Nil;
}

直接就是元类和类进行对比:这样我们可以得出:re2 = 0  re4 = 0

3.继续分析isKindOfClass实例方法

- (BOOL)isKindOfClass:(Class)cls {
//    类    VS 类+ 类的父类for (Class tcls = [self class]; tcls; tcls = tcls->superclass) {if (tcls == cls) return YES;}return NO;
}

类和类以及类的父类进行循环判断我们可以得出re5 = 1 ;re7 =1;

4.继续分析isMemberOfClass实例方法

- (BOOL)isMemberOfClass:(Class)cls {
//    类 vs 类return [self class] == cls;
}

直接就是类和类进行对比,我们可以得出re6 =1 re8 =1

综上分析我们得出 re1 = 1 ,re2 = 0 re3 = 0 re4 = 0 re5 =1 re6 =1 re7 =1 re8 =1;

打印结果为:

和我们分析的是一样的;

我们可以继续拓展一下

        BOOL re9 = [(id)[NSObject class] isKindOfClass:[XZPerson class]];BOOL re10 = [(id)[NSObject class] isMemberOfClass:[XZPerson class]];BOOL re11 = [(id)[NSObject alloc] isKindOfClass:[XZPerson class]];BOOL re12 = [(id)[NSObject alloc] isKindOfClass:[XZPerson class]];NSLog(@" \nre5 :%hhd\n re6 :%hhd\n re7 :%hhd\n re8 :%hhd\n",re9,re10,re11,re12);

re9 ,re10,re11,re12 结果是什么呢?欢迎留言评论

欢迎大家点赞,关注我的CSDN,我会定期做一些技术分享!

iOS 面试题(iskindof)相关推荐

  1. 超全!iOS 面试题汇总

    超全!iOS 面试题汇总 2015-10-20 CocoaChina 作者:Job_Yang 之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家. ...

  2. 原 iOS面试题收集

    原 iOS面试题收集 发表于2年前(2013-07-22 13:47)   阅读(369) | 评论(0) 4人收藏此文章, 我要收藏 赞0 听云性能监测产品App.Server.CDN免费试用,绑定 ...

  3. 经过阿里,百度一面,二面后,我总结了150道iOS面试题

    经过阿里,百度一面,二面后,我总结了150道iOS面试题. 金三银四已经过去,根据统计,很多人都会选择在三月四月跳槽,原因有很多,企业年后会有大量员工离职,员工觉得老公司待遇不怎么样?薪资不够高,想换 ...

  4. 国内搜索大哥iOS面试题

    每一次面试之后都会对问到的面试题进行总结. 这篇总结的是我面试某大型搜索公司的iOS面试题.一面(15min)+二面(30min).并拿到实习offer.当然在今天这个特殊的节日,祝大家新年快乐.希望 ...

  5. iOS面试题-UI篇

    http://www.360doc.com/content/20/0630/21/31460730_921535347.shtml 这里有关于面试方面汇总:关于iOS面试题汇总(栏目持续更新)http ...

  6. 史上最全的iOS面试题及答案

    史上最全的iOS面试题及答案 1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encodin ...

  7. 那些著名或非著名的iOS面试题(中)

    接上篇:那些著名或非著名的iOS面试题(上),本文继续介绍一些著名或非著名的iOS面试题. 1. 反转二叉树,不用递归 /*** Definition for a binary tree node.* ...

  8. 2019最新iOS面试题及答案

    1. Object-C的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-C的类不可以多重继承;可以实现多个接口,通过实现 ...

  9. iOS 面试题--转自唐巧

    iOS 面试题(一)寻找最近公共 View 题目:找出两个 UIView 的最近的公共 View,如果不存在,则输出 nil . 分析:这其实是数据结构里面的找最近公共祖先的问题. 一个UIViewC ...

最新文章

  1. 待飞日记(第四天和第五天)
  2. 本地win7ping VM linux ipv6地址问题
  3. python极客项目编程_Python极客项目编程 ([美]Mahesh Venkitachalam) 中文pdf完整版
  4. python3-numpy数组切片和索引
  5. access inner join 数据类型不匹配_用Access开发生产管理系统
  6. python用什么来写模块-用Python编写模块有何技巧?
  7. 最简单的基于FFmpeg的移动端例子:Android 视频解码器-单个库版
  8. cad2007错误1308 html,win7系统安装CAD2008提示“错误1308,源文件未找到“的解决方法...
  9. rsort php,php中rsort函数实例用法
  10. mysql 字符串的hash函数_【转载】字符串Hash函数比较
  11. 热烈庆祝blog开通
  12. WIN10右键菜单没有新建项了,怎么办?
  13. 和平精英有电脑版吗_和平精英电脑版灵敏度调多少 CP端灵敏度设置攻略
  14. sap事务代码_SAP财务常用的MM模块事务代码清单
  15. python毕业设计总结范文大全_毕业论文设计总结范文.docx
  16. 第十四周练兵区——编程题——不计入总分
  17. Java汇集接口、异常处理、常用使用类和集合等技术的实验项目
  18. 高德地图导航和标注,通过调用高德APP实现呢
  19. Windows 11 上使用安卓应用
  20. 苹果开发者账号申请流程说明

热门文章

  1. 复旦大学-软件学院-软件工程(MSE)-电子信息-非全日制-考研经验-复试经验
  2. 企业网站建设的内容与协议
  3. 47..贪心  失恋28天-追女孩篇
  4. 为啥打开桌面计算机很慢,电脑开机进入系统很慢怎么办?电脑启动速度慢的解决方法...
  5. python批量图像处理_python数字图像处理(6):图像的批量处理
  6. 7-88 晨阳哥哥之世界末日 (15分)
  7. 我的世界刷铁机java版_我的世界:刷铁机其实很容易制作,但是有一个特殊的限制条件!...
  8. 哪些操作可以查看计算机硬件属性,如何查看电脑性能
  9. “匆匆的总是时间” -- CSDN俱乐部新人半年经历杂谈
  10. IPC-7077《微电子组装行业引线键合工艺、材料的要求及可接受性》标准开发技术组招募成员