<<写给广大非科班iOS开发者的一篇面试总结>>答案

答案来源于网上,非原创,如有侵权请联系本人

1、如果让你实现属性的weak,如何实现的?

答:对于注册为weak的对象,系统会以weak指向的对象内存地址作为key,将之放入到一个hash表之中,当此对象的引用计数为0时会调用dealloc,之后遍历hash表中此key所对应的对象,将之置为nil。按照这个思路,我们可以在dealloc中手动释放weak属性,比如执行一段block,可以参照 这里

2、如果让你来实现属性的atomic,如何实现?

答:声明为atomic的属性,系统能保证每一个get或set操作都能顺利完成。不论哪个线程调用了get或者set方法,系统会将这些操作串行执行。

假设有一个 atomic 的属性 "name",如果线程 A 调[self setName:@"A"],线程 B 调[self setName:@"B"],线程 C 调[self name],那么所有这些不同线程上的操作都将依次顺序执行——也就是说,如果一个线程正在执行 getter/setter,其他线程就得等待。因此,属性 name 是读/写安全的。

3、KVO为什么要创建一个子类来实现?

没找到答案,我觉得应该是为了不影响用户使用原有类,在用户看来没有任何不对的地方。

4、类结构体的组成,isa指针指向了什么?(这里应该将元类和根元类也说一下)

每个实例对象都包含一个isa变量,属于Class类型,Class类型==objc_class *。这个isa的指向称为类对象(就代表一个类,oc同样视为对象),包含了该实例对象所属的类的一些信息。每一个类对象又包含两个Class类型变量,分别为isa、superclass,isa指向元类对象,superclass指向父类对象。

struct objc_class {

Class isa;   //指向元类对象

Class super_class;//指向父类对象

constchar *name;

long version;

long info;

long instance_size;

struct objc_ivar_list *ivars;

struct objc_method_list **methodLists;

struct objc_cache *cache;

struct objc_protocol_list *protocols;

}

见下图:

5、RunLoop有几种事件源?有几种模式?

答:Timer Source和Input Source(包括performSelector*方法簇、Port或者自定义Input Source);

1)NSDefaultRunLoopMode: 默认的运行模式,除了NSConnection对象的事件。

2) NSRunLoopCommonModes: 是一组常用的模式集合,将一个input source关联到这个模式集合上,等于将input source关联到这个模式集合中的所有模式上。在iOS系统中NSRunLoopCommonMode包含NSDefaultRunLoopMode、NSTaskDeathCheckMode、UITrackingRunLoopMode。

6、方法列表的数据结构是什么?

struct objc_method {

SEL method_name;// 方法名称

char char*method_typesE;// 参数和返回类型的描述字串

IMP method_imp;// 方法的具体的实现的指针

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 出题者简介: 孙源(sunnyxx),目前就职于百度,负责百度知道 iOS 客户端的开发工作,对技术喜欢刨根问底和...
    戈多_于勒阅读 5,776评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,283评论 19 139
  • 随着人生第一块马拉松奖牌的到手,尽管只是块10公里的完赛奖牌,我想,跑步的初级阶段已然完成,也是时候写些东西来记录...
    路边的三当家阅读 6,660评论 18 18
  • 公告内容【副盟主:E4E7\n赞助者:骑士\n开发者:AR91招收大量技术人员!请进群欢迎加入新势力メ新成员审核群...
    米兰liu阅读 1,706评论 0 0
  • #每日500字#Day 14 近一个月里,闺蜜的弟弟因喝酒睡觉窒息去世,同学的爸爸因突发支气管出血去世,姐姐宿舍的...
    白米饭儿阅读 2,865评论 0 0

友情链接更多精彩内容