iOS知识遗漏点整理(三)

170 阅读3分钟

1.iOS中的多线程?

iOS中指出线程创建的类有NSThread,NSOperationQueue,GCD.

  • NSThread是轻量化的线程类 初始化方式的创建的线程的话,需要手动开启,构造的方式创建的话,会自动开启。任务完成后,需要手动关闭,清理。系统提供了一些简易线程接口,例如主线程更新UI,子线程或后台模式执行某段代码。
  • GCD是基于C封装的一套接口,可以创建单个任务或一个队列,可异步或同步执行,可用栅栏barrier的方式等依赖的任务都完成后再执行下一个任务。
  • NSOperationQueue是在GCD基础上进行的一个抽象化封装,可以设置队列中任务的优先级,执行顺序,以及是面向对象的方式,可以用kvo的方式跟踪单个任务的状态,是否在执行,是否执行完,是否取消。还可以设置依赖关系,甚至是跨队列的依赖关系。

CGD只支持FIFO的队列。 NSOperationQueue可以设置并发数。 开发过程中某些场景需要考虑到,线程生命周期,线程同步,加锁。

2.加锁的方法有

  • 自旋锁:OSSpinLock
  • 互斥锁:pthread_mutex
  • 信号量:dispatch_semaphore
  • 基本锁,NSLock
  • 条件锁,NSCondition,NSConditionLock,@synchronized

3.Creat groups 和 Crate folder references的差别

  • Creat groups勾选这个选项,编译的时候会编译此文件,使用的时候,直接import “文件名” 即可
  • Crate folder references勾选这个选项,编译的时候不会编译此文件,使用的时候,文件路径需要基于项目下的全路径才能找到此文件。 扩展:copy item if needed,这个选项最好勾上,勾上会将文件拷贝一份到项目中,不勾上的话,移动项目或者移动当前添加的文件会造成索引不到当前的文件。

4.团队开发中如何共用证书以及真机上联调,需要哪些东西?

  • 真机调试:如果是bundleID已经是注册过的账号,真机调试最快速的办法,修改bundle ID( 新版Xcode会自动生成一套临时可用的证书,bundle Id 没有被占用的话),直到它不在报错。

如果不改bundleID,且无法提供账号的话,前提,先将真机设备的UUID添加至设备列表。

  • 证书申请流程:在Mac上的钥匙串上申请生成一个证书请求文件(.certSigningRequest)-->上传至苹果开发者中心---->生成一个证书(.cer)
  • 代码签名文件:选择证书+选择AppID+选择测试设备列表 ----> 生成代码签名文件。其中还分为开发、发布俩种类型。
  • 如果共用证书:.certSigningRequest此文件生成后,文件内包含一个公钥,keyChain内保存私钥. 将此私钥导出为.p12(personal Information Exchange)文件。 将证书(.cer),签名文件(.provisioning Profile),私钥(.p12)一起打包给队员即可。