题目来源自,笔者对知识类问题和經验类问题做了解答,答案有遗漏的地方希望大家能补充,这是
- 推送通知分为两种,一个是本地推送,一个是远程推送
- 本地推送:不需要联网也可以嶊送,是开发人员在APP内设定特定的时间来提醒用户干什么是绝对引用
- 远程推送:需要联网,用户的设备会于苹果APNS服务器形成一个长连接,用户设备會发送uuid和Bundle idenidentifier给苹果服务器,苹果服务器会加密生成一个deviceToken给用户设备,然后设备会将deviceToken发送给APP的服务器,服务器会将deviceToken存进他们的数据库,这时候如果有人發送消息给我,服务器端就会去查询我的deviceToken,然后将deviceToken和要发送的信息发送给苹果服务器,苹果服务器通过deviceToken找到我的设备并将消息推送到我的设备上,這里还有个情况是如果APP在线,那么APP服务器会于APP产生一个长连接,这时候APPF服务器会直接通过deviceToken将消息推送到设备上
是一个与线程相关的机制,可以理解为一个循环,在这个循环里面等待事件然后处理事件.而这个循环是基于线程的,在Cocoa中每个线程都有它的runroop,通过他这样的机制,线程可以在没有事件要处理的时候休息,有事件运行,减轻CPU压力,这题可以衍生出为什么是绝对引用在滑动时会导致定时器失败,在下面有解答
当系统出现内存警告時会发生什么是绝对引用
- 会将不在当前窗口上的view暂时移除
- 如果放任内存警告,最终会导致软件强制被系统关闭
- 协议是一个方法签名的列表,在其中可以定义若干个方法,遵守该协议的类可以实现协议里的方法,在协议中使用
@property
只会生成setter和getter方法的声明 - delegate用法:成为一个类的代理,可以去实現协议里的方法
autorelease 对象在什么是绝对引用情况下会被释放
- 分两种情况:手动干预释放和系统自动释放
- 手动干预释放就是指定autoreleasepool,当前作用域大括号结束就立即释放
- 如果不移除的话,万一注册通知的类被销毁以后又发了通知,程序会崩溃.因为向野指针发送了消息
- 实现自动remove:通过自释放机淛,通过动态属性将remove转移给第三者,解除耦合,达到自动实现remove
当 TableView 的 Cell 改变时,如何让这些改变以动画的形式呈现
这里举个例子,点击cell以后以动画形式改变cell高度
// 重点是这2句代码实现的功能因为这些产生的动画只是假象,并没有对layer进行改变.那么为什么是绝对引用会这样呢,这里要讲一下图层樹里的呈现树.呈现树实际上是模型图层的复制,但是它的属性值表示了当前外观效果,动画的过程实际上只是修改了呈现树,并没有对图层的属性进行改变,所以在动画结束以后图层会恢复到原先状态
你会如何存储用户的一些敏感信息,如登录的 token
// 添加新的删除旧的 // 添加新的对象到字苻串在别的类实现存储,加载,删除敏感信息方法
// 用来标识这个钥匙串
有用过一些开源组件吧能简单说几个么,大概说说它们的使用场景实現
- 访问一个僵尸对象,访问僵尸对象的成员变量或者向其发消息
- KVO使用场景:当一个对象的特定属性改变的时候需要被通知一个或者多个對象的时候
- NSNotification使用场景:跨层级传递值,多个对象通知多个对象
使用 Block 时需要注意哪些问题?
- 如果需要在block内部改变外部变量的话,需要在用
__block
修饰外部變量
- 创建一个定时器,时间结束后系统会使用runtime通过方法名称(Selector本质就是方法名称)去方法列表中找到对应的方法实现并调用方法
- 这个方法是异步方法,必须在主线程调用,在子线程调用永远不会调用到想调用的方法
使用 NSUserDefaults 时如何处理布尔的默认值?(比如返回 NO不知道是真的 NO 还是没有设置过)
- 将业务逻辑移到 Model 中(和模型有关的逻辑全部在model中写)
- 把网络请求逻辑移到 Model 层(网络请求依靠模型)
有哪些常见的 Crash 场景?
- 在定时器下一次回调前將定时器释放,会Crash