1、生成二维码
创建滤镜对象(CIFilter) -> 恢复滤镜的默认属性 -> 设置数据(NSString -> Nsdata) -> 通过KVC给滤镜设置输入值 -> 获取滤镜输出图像(CIImage -> UIImage) -> 开启上下文绘图 -> 把二维码画上去 -> logo画上去 -> 获取图片 -> 关闭图形上下文
2、扫描二维码
获取设备支持状态 -> 初始化 -> 生成输出对象 -> 设置代理(AVCaptureMetadataOutputObjectsDelegate) -> 生成会话 -> 产生输出 -> 采集渲染 -> 启动扫描
3、多线程
NSOperationQueue是用GCD封装的,GCD更底层、NSOperationQueue更抽象,所以GCD在性能上比较快
从一步操作的顺序与依赖关系上来讲,GCD实现的代码量比NSOperationQueue多
如果需要更多的异步交互与UI呈现,NSOperationQueue更好,如果需要更高的并发能力,GCD更好。
UI更新必须放在主线程
GCD通过block封装,不需要管理线程的创建/销毁/复用的过程
4、支付
填写APPID/私钥 -> 生成订单信息及签名 -> 将订单信息拼接成字符串 -> 调用signString函数生成签名并且base64加密 -> 把签名数据给支付宝 -> 调用支付结果开始支付
注意事项:URL Scheme 、 检查私钥
5、https协议
对称加密(加密与解密使用相同密钥)
6、iOS缓存
CoreData:取出上下文管理者(managedObjectContext) -> 保存数据 -> 查询数据 editor->Add Model Version(更新版本修改子段)
plist: NSHomeDirectory()
NSUserDefaults、FMDB
NSKeyedArchiver(归档):继承NSObject,遵循NSCoding协议 - (void)encodeWithCoder:(NSCoder *)aCoder
7、推送/通知
在didRegisterForRemoteNotificationsWithDeviceToken中注册推送
iOS10.0: willPresentNotification(前台)、didReceiveNotificationResponse(后台)
iOS7.0-10.0:didReceiveRemoteNotification
登录成功的时候给当前用户设置别名/唯一标识符
1、讲一下MVC、MVVM、MVP ?
MVC: 逻辑、视图、数据分层,实现洁柔
MVVM: Model—View-ViewModel,将一部分逻辑和数据处理从Controller搬到ViewModel中
低耦合 View和Model独立变化
可重用性 视图逻辑放到ViewModel中,让很多View重用这段视图逻辑
独立开发
可测试性
2、属性(几个部分、关键字)? @dynamic、@synthesize ?
属性: 描述类的特征
三个部分: 带下划线的成员变量、getter、setter方法
关键字: readwrite、assign、atomic
@dynamic: 修饰的属性,getter、setter方法不自动生成
@synthesize:修饰的属性,getter、setter方法会自动生成,指定与属性相对应的成员变量
3、滑动UITableViewCell,NSTimer是否刷新 ?
NSDefaultRunLoopMode 空闲状态
UITrackingRunLoopMode UIScrollView滑动时会切换到该Mode
UIInitializationRunLoopMode run loop启动时,切换到该mode
4、有a、b、c、d 4个异步请求,如何判断a、b、c、d都完成,如果需要a、b、c、d顺序执行,该如何实现 ?
是否执行完成:GCD的group
dispathc_group_t group = dispatch_group_create()
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispathc_group_async(group, queue, ^{“任务”})
顺序执行: 放到串行队列当中
5、多线程
GCD:
NSThread:
NSOperationQueue:
6、CoreData使用、更新版本
使用: 新建实体,添加属性
获取代理和托管对象
链接数据库
KVC添加数据
options: nil -> options: NSDictionary