《新浪微博剖析 iOS 高级面试》笔记(二):Objective-C语言特性相关面试问题

1,088 阅读3分钟

我的Github地址

小码哥《恋上数据结构与算法》笔记

极客时间《iOS开发高手课》笔记

iOS大厂面试高频算法题总结

iOS面试资料汇总

分类

一、使用分类做了哪些事?

  • 声明私有方法
  • 分解体积庞大的类文件
  • 把Framework的私有方法公开

二、分类的特点

  • 运行时决议
  • 可以为系统类增加分类

三、分类可以添加哪些内容?

  • 实例方法
  • 类方法
  • 协议
  • 属性

四、分类源码解读

关联对象

一、能否给分类添加“成员变量”?

  • 可以通过“关联对象”技术,为分类添加成员变量。

二、关联对象源码

小码哥iOS学习笔记第七天: 关联对象

扩展

一、一般用扩展做什么?

  • 声明私有属性
  • 声明私有方法
  • 声明私有成员变量

二、分类和扩展的区别?

  • 分类运行时决议扩展编译时决议
  • 分类可以有声明有实现。扩展只以声明的形式存在,多数情况下寄生于宿主类的.m中。
  • 可以为系统类添加分类,不能为系统类添加扩展。

代理

  • 准确的说是一种软件设计模式
  • iOS当中以@protocol形式体现。
  • 传递方式一对一。

一、如何规避循环引用?

通知

  • 是使用观察者模式来实现的用于跨层传递消息的机制。
  • 传递方式为一对多

一、如何实现通知机制?

  • 全局字典Notification_Map,以notificationNamekey,以数组Observers_Listvalue
  • Observers_List保存所有声明相同notificationName的对象。
  • 对象以Observer的形式保存,其中包括执行的函数对象本身等。

KVO

小码哥iOS学习笔记第四天: KVO的本质

KVC

小码哥iOS学习笔记第五天: KVC的本质

属性关键字

  • 读写权限
    • readonly
    • readwrite
  • 原子性
    • atomic
    • nonatomic
  • 引用计数
    • retain/strong
    • assign/unsafe_unretained
    • weak
    • copy

一、atomic是否是线程安全的?

  • atomic修饰的对象,系统会对它的setget函数进行加锁。
  • 如果atomic修饰一个数组,那么对数组赋值set和获取get,是可以保证线程安全的。
  • 如果对数组进行添加元素删除元素操作,则不在atomic的操作范围内,是线程不安全的。 小码哥iOS学习笔记第二十三天: atomic

二、assign和weak的区别?

  • assign
    • 修饰基本数据类型,如intbool等。
    • 修饰对象类型时,不改变其引用计数。
    • 会产生悬垂指针。
  • weak
    • 不改变背修饰对象的引用计数。
    • 所指对象在被释放之后会自动置为nil

三、浅拷贝和深拷贝的区别?

小码哥iOS学习笔记第二十五天: OC对象的内存管理

Objective-C语言面试总结

  • MRC下如何重写retain修饰变量的setter方法?
  • 请简述分类实现原理。
  • KVO的实现原理是怎样的?
  • 能否为分类添加成员变量?