一. 请简述iOS中Push原理
第一阶段:应用程序把要发送的消息 目的iPhone的标识打包,发给APNS.
第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找 有相应标识的iPhone,并把消息发送到iPhone.
第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知
二. iOS7和iOS7以下常见的兼容性问题和解决方法?
- baseline
原因:autolayout自动加了baseline的constraints,而baseline只有iOS8以后才有,兼容iOS7就崩溃了
解决:直接移除baseline相关的constraint即可。 - [[UINavigationBar appearance] setTranslucent:NO]
原因iOS8.0之后[UINavigationBar appearance]才可以setTranslucent,兼容iOS7需要添加判断
解决:兼容iOS7需要添加判断
if(IOS8_OR_LATER && [UINavigationBar conformsToProtocol:@protocol(UIAppearanceContainer)]) {
[[UINavigationBar appearance] setTranslucent:NO];
}
storyboard segue show
原因:在iOS7下如果没有设置navigationController为initController,show会自动将push转换成modal。简而言之就是在sb里每个show的segue
解决:保证它的初始位置有个navigationController。constrain to margin
原因:这是设置了constrain to margins的关系,这玩意也是iOS8后才有的scrollerView
原因:找不到setAutomaticallyAdjustsScrollViewInsets:方法
解决:重写方法setAutomaticallyAdjustsScrollViewInsets:
三. 怎么用 copy 关键字
一般使用retain或者strong修饰属性时,是使用引用对象的指针指向同一对象,即为同一块内存地址.只要其中有一个指针变量被修饰时所有其他引用该对象的变量都会被改变
而使用copy关键字修饰在赋值时是释放旧对象,拷贝新对象内容.重新分配了内存地址.以后该指针变量被修改时就不会影响旧对象的内容了.
copy只有实现了NSCopying协议的对象类型才有效,常用于NSString和Block
四. 这个写法会出什么问题
@@property (copy) NSMutableArray *array;
当一个NSMutableArray对象使用initWithArray: 初始化方法创建时,并将该对象赋值给了array属性。那么之后array执行可变数组的方法,如: removeObjectAtIndex: 时会出现unrecognized selector sent to instance的崩溃。原因在于array属性在被赋值(setter)的时候默认执行了copy方法后变为了不可变NSArray对象。
五. 如何让自己的类用 copy 修饰符?如何重写带 copy 关键字的 setter?
该类必须要实现NSCopying协议。实现 - (id)copyWithZone:(NSZone *)zone; 方法。
重写copy关键字的setter时,需要调用一下传入对象的copy方法。然后赋值给该setter的方法对应的成员变量。
六. 怎样防止指针的越界使用问题?
- 防止数组越界,必须让指针指向一个有效的内存地址,
- 防止向一块内存中拷贝过多的内容
- 防止使用空指针
- 防止改变const修改的指针
- 防止改变指向静态存储区的内容
- 防止两次释放一个指针
- 防止使用野指针
七. http请求方式有哪些?
- GET
- HEAD
- PUT
- DELETE
- POST
- OPTIONS
八. 属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?
- readwrite 是可读可写特性;需要生成getter方法和setter方法时
- readonly 是只读特性 只会生成getter方法 不会生成setter方法 ;不希望属性在类外改变
- assign 是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;
- retain 表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;
- copy 表示赋值特性,setter方法将传入对象复制一份;需要完全一份新的变量时。
- nonatomic 非原子操作,决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全,
一般使用nonatomic
九. http 的post与get区别与联系,实践中如何选择它们?
- get是从服务器上获取数据,post是向服务器传送数据.
- get方式提交数据最多只能有1kB,而POST一般没有限制.
- 安全性问题,使用get参数会在URL中,而pot不会,所以用户输入的数据包含敏感数据用post.
十. 检查内存管理问题的方式有哪些?
Xcode自带检测工具.
纯手动 有地方是个人理解 有误的地方希望大家能给指出 谢谢
大家面试中遇到的问题 也可以留言分享
如果您喜欢 或者对您有点帮助 希望点一下喜欢 谢谢了~~