iOS面试iOS学习开发iOS开发技术分享

iOS开发面试梳理(一)

2019-07-13  本文已影响14人  程序员_秃头怪

序言

目前形势,参加到iOS队伍的人是越来越多,甚至已经供过于求了。今年,找过工作的人可能会更深刻地体会到今年的就业形势不容乐观,加之,培训机构一火车的向用人单位输送iOS开发人员,打破了生态圈的动态平衡。以我以往的经验及在公司原有的技术,为iOS应聘者梳理一下面试题,希望能祝一臂之力!

一、OC的理解与特性
1.动态类型
2.动态绑定

基于动态类型,在某个实例对象被确定之后,其类型便被确定了,该对象对应属性和响应消息也被完全确定。

3.动态加载

根据需求加载所需要的资源,最基本就是不同机型的适配,例如,在retina设备上加载@2x的图片,而在老一些的普通苹果设备上加载原图,让程序在运行时添加代码模块以及其他资源,用户可根据需要加载一些可执行代码和资源,而不是在启动时就加载所有组件,可执行代码可以含有和程序运行时整合的新类。

二、简述内存管理基本原则
自动释放池工作原理
Objective-C中可修改和不可以修改类型
当我们调用一个静态方法时,需要对对象进行 **release **吗?

iOS技术交流群:923910776,群内提供数据结构与算法、底层进阶、swift、逆向、底层面试题整合文档等免费资料!

当我们释放我们的对象时,为什么需要调用[super dealloc]方法,它的位置又是如何的呢?
static、self、super关键字的作用
解释self = [super init]方法
在某个方法中 self.name = _name,name = _name 它 们有区别吗,为什么?
对象可以被copy的条件
- (id)copyWithZone:(NSZone *)zone { 
    MyObject *copy = [[[self class] allocWithZone: zone] init]; 
    copy.username = [self.username copyWithZone:zone]; 
    return copy;
}

定义属性时,什么时候用 assignretain、**copy **以及它们的之间的区别
堆和栈的区别
内存的使用和优化的注意事项
其他注意事项
三、如何理解MVC设计模式

MVC是一种架构模式,M表示Model,V表示视图View,C表示控制器Controller:

四、如何理解MVVM设计模式
五、Objective-C 中是否支持垃圾回收机制?
六、协议的基本概念和协议中方法默认为什么类型

OC中的协议是一个方法列表,且多少有点相关。它的特点是可以被任何类使用(实现),但它并不是类(这里我们需要注意),自身不会实现这样方法, 而是又其他人来实现协议经常用来实现委托对象(委托设计模式)。如果一个类采用了一个协议,那么它必须实现协议中必须需要实现的方法,在协议中的方法默认是必须实现(@required),添加关键字@optional,表明一旦采用该协议,这些“可选”的方法是可以选择不实现的。

七、简述类目 category 优点和缺点

优点:

八、类别的作用
+ (NSIndexPath *)indexPathForRow:(NSInteger)rowinSection:
(NSInteger)section

原本属于NSIndexPath的方法,但因为这个方法经常使用的表的时候调用,跟表的关系特别密切,因此把这个方法一类别的形式,声明在UITableView.中。

九、循环引用的产生原因,以及解决方法

多个对象间依然会存在循环引用问题,形成一个环,在编程中,形成的环越大越不容易察觉,如下图所示:

解决方法
十、键路径(keyPath)、键值编码(KVC)、键值观察(KVO)
键路径
键值编码 KVC
Demo

比如我自定义的一个button

[self addObserver:self forKeyPath:@"highlighted" options:0 context:nil];
 #pragma mark KVO 
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    if ([keyPath isEqualToString:@"highlighted"] ) { 
        [self setNeedsDisplay]; 
    } 
}

对于系统是根据keypath去取的到相应的值发生改变,理论上来说是和kvc机制的道理是一样的。

KVC机制通过key找到value的原理
在 Objective-C 中如何实现 KVO
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath 
options:(NSKeyValueObservingOptions)options 
context:(void *)context;

- (void)observeValueForKeyPath:(NSString *)keyPath 
ofObject:(id)object change:(NSDictionary *)change context:(void *)context;

- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;

十一、代理的作用
十二、NSNotification、Block、Delegate 和 KVO 的区别
十三、 对谓词的认识
十四、#include与#import的区别、#import 与@class 的区别
十五、@public、@protected、@private 它们的含义与作用

推荐一个QQ交流群 !群内有最近整理出来的面试题,以及一些书籍学习资料!也是为了给大部分还在做iOS开发的朋友一个交流圈子!

923910776
上一篇下一篇

猜你喜欢

热点阅读