厦门IOS培训
达内厦门iOS培训中心

0592-5903858

热门课程

2018年最新iOS面试题及答案

  • 时间:2018-05-31
  • 发布:厦门达内ios培训
  • 来源:企业面试题

我结合了自己近期面试经历,总结了一份iOS面试题,基本会考到,也是比较重要比较重要比较关键的基础知识,供参考。 
时间比较短,有些知识层面写的比较浅,覆盖的知识面也不够广,有时间的话我会补充。 
面试的话基本会考基础,关于C、C++、数据结构、计算机网络、操作系统、计算机组成原理、数字逻辑等知识可能都会问到,本篇博文也是只针对iOS新手所写。我在总结的时候也是结合代码掌握的,死记硬背效果不太大。 
对于即将跳槽的老司机来说,更多的会是项目方面及更深层次的知识点,本博可略过。 
哪里出错了请大神指点,万分感谢。 
希望大家面试成功~ 


@property参数:

内存管理特性(set方法内存管理):

  1. assign: setter方法直接赋值,不进行任何retain操作,不改变引用计数,常用于“纯量类型”(CGFloat、NSInteger等)和C数据类型(int、float、double、char等)的简单赋值操作,id类型也要用assign,所以iOS中的代理delegate属性都会用assign
  2. retain:生成符合内存管理的set方法(release旧值,retain新值),适用于OC对象的成员变量
  3. copy:生成符合内存管理的set方法(release旧值,copy新值),适用于NSString、NSArray等不可变对象,和strong类似,不过该属性会被复制一个新的副本,当以copy标示的对象B指向一个可变类型(NSMutableString、NSMutableArray等)的对象A时,改变A的值不会使B的值改变,例:
@property(nonatomic,strong)NSString*string1;@property(nonatomic, copy)NSString*string2; - (void)test {NSMutableString*string = [NSMutableStringstringWithFormat:@"apach3"];self.string1= string;self.string2= string; sting =nil;NSLog(@"sting: %@", string);NSLog(@"sting1: %@",self.string1);NSLog(@"sting2: %@",self.string2); }
注:
  1. weak和strong通常用于ARC,非ARC的retain相当于ARC的strong,非ARC的assign相当于ARC的weak
  2. strong,weak, unsafe_unretained往往都是用来声明属性的,如果想声明临时变量就得用__strong,__weak,__unsafe_unretained,__autoreleasing,其用法与上面介绍的类似
  3. 相比而言对于delegate来说weak比assign更好一些,虽然delegate所指向的对象的生命周期是覆盖了delegate成员变量本身所在的生命周期,当本身的生命周期内,本身被销毁,其delegate也就没有存在的意义了,但是如果delegate又被其他地方引用,在被销毁的时候weak声明的delegate成员变量会被赋值为nil,相比于assign它是更安全的做法,而我们常用的UITableView的delegate属性是这样定义的:@property (nonatomic, assign) id<UITableViewDelegate> delegate;,这里用assign的原因是为了在ARC下兼容iOS4及更低版本来实现弱引用机制,所以尽量使用weak

读写特性(是否要生成set方法):

readwrite:这是默认参数,同时生成set和get方法的声明和实现,可读、写 
readonly:只生成set方法的声明与实现,只读

多线程特性(用于多线程管理):

atomic:这是默认参数,原子性,性能低,会被加锁(一个操作执行过程不能被中断,要么执行完要么不执行,不可以在中途被CPU暂停调度,在多线程环境下不会出现变量被修改的问题,保证数据同步),做金融等要求高安全的时候使用 
onatomic:非原子性,性能高,不加锁,操作是直接从内存取数值,无法保证数据同步

方法名特性(用于set、get方法重命名):

setter:给成员变量的set方法重命名,set方法默认命名: 
- (void)set成员变量名(成员变量名称首字母大写):(成员变量数据类型)成员变量名; 
getter:给成员变量的set方法重命名,get方法默认命名:- (成员变量数据类型)成员变量名; 
synthesize:合成访问器方法,property声明了成员变量的访问方法,synthesize定义了由property声明的方法

注:
  1. 对应关系:property声明方法->.h文件声明getter和setter方法、synthesize定义方法->.m文件实现getter和setter方法(需要@synthesize name = _name)
  2. Xcode4.5及以后版本可以省略@synthesize,编译器会自动帮你加上get和set方法,而且默认访问_name这个成员变量,如果找不到,会自动生成一个_name私有成员变量



设计模式:

设计模式是一种编码经验,就是用一种比较成熟的逻辑去处理某一种类型的事情
  1. MVC模式: model、view、controller,把模型、视图、控制器进行解耦和编写,是一切设计的基础,所有新的模式都是基于MVC的改进
  2. MVVM模式: model、view、viewmodel,把模型、视图、业务逻辑层进行解耦和编写,是对胖模型的拆分,本质是给控制器减负,将弱的业务逻辑放到VM中去处理
  3. 单例模式:通过static关键词,声明全局变量,在整个进程运行期间只会被赋值一次
  4. 观察者模式: KVO是典型的通知模式,观察某个属性的状态,状态发生变化时通知观察者
  5. 委托模式:代理+协议的组合,实现1对1的反向传值操作
  6. 工厂模式:通过一个类方法,批量的根据已有模版生产对象
上一篇: 整理2018年iOS面试题
下一篇:2018最新iOS面试题精选总结

2018最新iOS面试题精选总结

2018年最新iOS面试题及答案

整理2018年iOS面试题

各大企业常见的ios面试题之一

选择城市和中心
贵州省

广西省

海南省