记录一下平时看到过的面试题,后面遇到好的再添加
一 属性的实质是什么?属性默认的关键字都有哪些?atomic和nonatomic区别?@dynamic关键字和@synthesize关键字是用来做什么的?
1 @property = ivar + getter + setter;@property 系统会自动生成setter和getter方法;
2 readwrite(读写),readonly(只读),assign(不会使引用计数加1),retain(引用计数加1)
copy,nonatomic(非原子性访问,多线程并发访问会提高性能),atomic(原子访问)
weak(相当于assign,可以把对应的指针变量置为nil)
3 atomic和nonatomic区别主要是在于系统生成的getter和setter方法不一样,nonatomic的速度要比atomic快
atomic会给线程增加一个安全锁, 但是atomic并不能保证线程安全
4 dynamic和synthesize,前者不自动生成setter和getter由自己实现存取方法,后者编译期间会让编译器自动生成setter/getter方法,当 有自定义的存或取方法时,自定义会屏蔽自动生成该方法
二 NSString一般关键字使用copy还是strong?为什么?
2.1 block使用copy关键字,为什么?
默认情况下block是存在栈中的,可能被随时回收,通过copy操作可以使其在堆中保留一份, 相当于一直强引用着, 因此如果block中用到self时, 需要将其弱化
三 可变集合类 和 不可变集合类的 copy 和 mutablecopy有什么区别?
四 进程和线程的区别?同步异步的区别?并行和并发的区别?
进程和线程的区别:一个程序至少有一个进程,一个进程至少有一个线程,进程是资源分配和拥有的单位,同一个进程内的线程共享进程资源。线程是处理器调度的基本单位。
并行和并发的区别:并发性:两个和两个以上的事件或活动在同一时间间隔内发生,并行性:是指两个和两个以上事件或活动在同一时刻发生
五 GCD的一些常用的函数
dispatch_async异步执行队列 dispatch_sync 同步执行队列 dispatch_get_main_queue全局串行 dispatch_get_global_queue并发
六 数据持久化(FMDB)
七 说一下AppDelegate的几个方法?从后台到前台调用了哪些方法?第一次启动调用了哪些方法?从前台到后台调用了哪些方法?
八 NSCache优于NSDictionary的几点?
NSCache是一个容器,用于临时存储对象,NSCache中的key不用实现copy,存储的对象也不必实现NSCoding协议,程序退出后就被释放
九 知不知道Designated Initializer?使用它的时候有什么需要注意的问题?
十 如何捕捉导航栏系统返回键的点击事件
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item; // called to push. return NO not to.
十一 是否使用过在一个类里面定义多个类
十二 在cell的.m里面如何获取到cell所在的controller(通过UIResponder)
十三 对appdelegate的rootViewController进行过什么操作(比如替换)
十四 类目(category)与延展,category想添加属性怎么办(用runtime方法绑定属性)
category:用于扩展已存在的类,向一个类添加方法,无法添加实例变量
extension:
重写updateConstraints会多次执行,每执行一次,内存就会增长一次,根据官方文档说明对于没用或失效的约束应该立即删除, 而 mas_makeConstraints方法就是添加约束,每添加一层,内存增长一次。不删除的话他就一直存在,因此需要约束管理。
Masonry提供了三种设置约束的方法:
1 - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block 添加约束,不管原来与没有,只是添加
2 - (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *))block 更新,在原来约束的基础上进行局部更新
3 - (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block 重设。删除原来已有的约束
十六 简单说明一下Runloop,buttom的添加点击事件,只写了addtarget没有写具体方法,为什么会崩溃。什么解决
十七 ios重用机制
十八 runtime的用法
a 绑定属性
b 动态创建类NSClassFromString
c 交换方法和给变量赋值
d 映射
十九 NStimer在什么情况下会造成线程堵塞,如果NSTimer不准怎么实现一个精准的?
NSTimer加在main runloop中,模式是NSDefaultRunLoopMode,main负责所有主线程事件,例如UI界面的操作,复杂的运算,这样在同一个runloop中timer就会产生阻塞。
二十 ios一个界面多个网络请求如何处理(GCD处理)
二十一 loadView的原理
loadView和viewDidLoad的区别就是,调用loadView时view还没有生成,调用viewDidLoad时,view已经生成了