Skip to content

Latest commit

 

History

History
31 lines (22 loc) · 1.52 KB

2019-03-28 iOS SDK 开发注意事项.md

File metadata and controls

31 lines (22 loc) · 1.52 KB

2019-03-28 iOS SDK 开发注意事项

线程

  1. 慎用同步处理,绝对不要进行同步主线程处理这种该操作!
  2. 维护和使用自己的线程,避免使用系统线程,减少与使用方冲突的机会。
  3. SDK 初始化除非失败否则只允许初始化1次。 一个惨痛的教训:

SDK 启动的方法中进行了主线程同步处理,本来因为有本地缓存的查为了预防使用方乱掉导致数据竞争做的(因为一些功能没有开放,使用方发现启动方法可以帮助他们达成,会各个地方调用,导致数据混乱)。

没想到使用方将我们的 SDK 使用单例封装,启动的时候在子线程启动,并在 -applicationDidBecomeActive: 方法中使用了单例的其他方法。结果出现了死锁。

死锁原因:

因为单例使用的是一下方法。

 static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    });

这个方法会在初始化未完成的时候在调用的位置进行同步等待。子线程初始化的时候,主线程使用会进行同步等待。当我们 SDK 进行主线程同步处理的时候就发生了死锁。

命名

虽然说现在使用 framework 是存在命名空间,但是最好还是进行区分(不区分会出现警告 详情:2019-01-23 引用相同类测试)。

结论:

  1. 所有 category 方法加前缀。
  2. 所有类名都应该加前缀。

其他的后续再继续补充...