上周公众号发布的以下文章:

  • iOS 图形处理概论
  • 再谈 __bridge, __bridge_transfer, __bridge_retained(内有彩蛋)
  • Flutter 的编译模式
  • 这些流行编程语言你会哪些?
  • 简报 · 第 5 期

本期知识小集的主要内容包括:

  • 再谈数组、集合、字典与 hash、isEqual 方法的关联
  • 使用 Keychain 存储登录态需要注意的一个坑
  • 给 UIView 添加阴影
  • 比较三种网络框架上传图片过程中的不同点?
  • 通过 runtime 控制导航栏的 hidden 属性
  • 关于 IAP 丢单的处理

再谈数组、集合、字典与 hash、isEqual 方法的关联

作者: halohily

我们或多或少了解,Objective-C 中的 NSArray、NSSet、NSDictionary 与 NSObject 及其子类对象的 hash、isEqual 方法有许多联系,这篇小集讲一下其中的一些细节。

NSArray 允许添加重复元素,添加元素时不查重,所以不调用上述两个方法。在移除元素时,会对当前数组内的元素进行遍历,每个元素的 isEqual 方法都会被调用(使用 remove 方法传入的元素作为参数),所有返回真值的元素都被移除。在字典中,不涉及 hash 方法。

NSSet 不允许添加重复元素,所以添加新元素时,该元素的 hash 方法会被调用。若集合中不存在与此元素 hash 值相同的元素,则它直接被加入集合,不调用 isEqual 方法;若存在,则调用集合内的对应元素的 isEqual 方法,返回真值则判等,不加入,处理结束。若返回 false,则判定集合内不存在该元素,将其加入。

从集合中移除元素时,首先调用它的 hash 方法。若集合中存在与其 hash 值相等的元素,则调用该元素的 isEqual 方法,若真值则判等,进行移除;若不存在,则会依次调用集合中每个元素的 isEqual 方法,只要找到一个返回真值的元素,就进行移除,并结束整个过程。(所以这样会有其他满足 isEqual 方法但却被漏掉未被移除的元素)。调用 contains 方法时,过程类似。

因此,若某自定义对象会被加入到集合或作为字典的 key 时,需要同时重写 isEqual 方法和 hash 方法。这样,若集合中某元素存在,则调用它的 contains 和 remove 方法时,可以在 O(1) 完成查询。否则,查询它的时间复杂度提升为 O(n)。

值得注意的是,NSDictionary 的键和值都是对象类型即可。但是被设为键的对象需要遵守 NSCopying 协议。

使用 Keychain 存储登录态需要注意的一个坑

作者: KANGZUBIN

今天要讨论的这个问题你可能永远都不会遇到,而且绝大部分情况下你很难在开发中事先预料到它未来可能会发生,但是一旦不幸发生了,可能就是一个很严重的线上问题,惨痛教训。

我们通常会在 Keychain(钥匙串)中存储一些密码、用户登录态等敏感数据,一是可以提高保存数据的安全性;二是当用户卸载 App 后重新安装,可以自动登录保留上次的登录态;三是同一开发者账号下的不同 App,如果是采用同一套账户体系,就可以通过 Keychain Groups 共享登录态。

我们的 App 之前都是只把用户的登录态保存在 Keychain 中,并在 App 启动时去读取它,这一直也都没什么问题。前一段时间我们的 App 由于业务合规的原因审核被拒,按照苹果的要求不得不把 App 从公司的 A 开发者账号转让到 B 开发者账号下(公司旗下有很多不同主体的开发者账号),转让过程很顺利,但发版后短时间内收到大面积的用户反馈说,更新新版本后提示“登录失效,需要重新登录”。

原因很容易就可以猜到,App 从 A 转让到 B,就无法读取保存在 A 账号下的 Keychain 数据了,用户更新版本覆盖安装后,打开 App 也就无法获取之前的登录态了。

而且对于这种已经发生的问题,我们似乎也没有什么有效的补救措施,临时加急再发一版似乎也解决不了问题,因为之前的 Keychain 数据就是读取不到了,总不能再把 App 转让回去吧,

「 iOS 知识小集 」2018 · 第 24 期相关推荐

  1. 「 iOS 知识小集 」2018 · 第 23 期

    上周公众号发布的以下文章: 美团客户端响应式框架 EasyReact 开源 巧妙利用 KVO 实现精准的 VC 耗时检测 微信小程序适配 iPhone X 总结 Shortcuts, Siri 功能增 ...

  2. 「 iOS知识小集 」2018 · 第 38 期

    原文链接 更新:前两周我们发了一条小集<Xcode 10.1 并没有修复由于 Assets 引起的在 iOS 9 上的崩溃问题>,根据最新消息,苹果已经在服务器端解决了这个问题,开发者通过 ...

  3. 「 iOS知识小集 」2018 · 第 35 期

    原文链接 上周公众号发布的以下文章: Flutter中Hybrid的实现 不改代码,Link-Time Optimization提高iOS代码效率 + 汇编代码原理分析 关于 Block 的几点思考 ...

  4. 「 iOS知识小集 」2018 · 第 29 期

    原文链接 本周我们启动主题收集,如果你有想了解的 iOS 技术方面的主题,请在我们的 github https://github.com/awesome-tips/iOS-Tips/ 提 issue, ...

  5. 「医疗知识图谱」到「综合性医疗大脑」

    本文首发于个人博客:www.bobinsun.cn 背景 最近,由于某些原因,特别关注了医疗知识图谱方面的发展&应用情况,有了些浅薄认识,故码此文,以供参考. 随着智能时代的到来,把临床数据. ...

  6. 一个barcode 多个 sku号_「小白知识帖」什么是亚马逊SKU?编写SKU还有这些讲究……...

    初入亚马逊的小白卖家常会听大佬们提到SKU.其实理解SKU和其作用很简单,但真正需要掌握的是如何编写有效的SKU.这些小细节的内容往往可以让小白卖家成长的更快. 什么是SKU? SKU(Stock K ...

  7. iOS知识小集·NSNumber to NSString出错啦

    起因 某一次准备把一个NSNumber显示在lable上. NSString *text = [NSString stringWithFormat:@"%@",value]; 复制 ...

  8. 专题解读 |「知识图谱」领域近期值得读的 6 篇顶会论文

    本期内容选编自微信公众号「开放知识图谱」. CIKM 2017 ■ 论文 | Hike: A Hybrid Human-Machine Method for Entity Alignmentin La ...

  9. 知识小集 2018 下半年文章汇总及年终总结

    又到岁末,又到了写总结,写愿景的时候.这里,我就来简单写写小集这一年的总结和下一年的展望吧. 总结 先简单列一下我们今年的产出: 公众号从 3月2号 开始,总共发了 42 期小集合集,以及 130+ ...

最新文章

  1. MagicLinux2.5正式版发布
  2. C#的dapper使用
  3. 了解 yarn 、npm、nodejs
  4. java 云笔记本_java版云笔记(五)
  5. linux监测文件输出命令,Linux-USB-检测枚举-1  lsusb输出内容详细解读
  6. 厉害了!这项技术BAT力捧!程序员:我彻底慌了...
  7. c语言编写记账程序,C语言会计记账管理系统
  8. 从HCNA到HCIE的运营商工程师走过的路,迈过的坎,欢迎参考自身情况
  9. 如何实现批量替换文件夹名称?
  10. CSS练习中|无序列表中,<li>的小黑点如何替换为图片(菜鸡趣味学习,细节到每一步)
  11. android 转发朋友圈,微信怎么转发朋友圈 转发朋友圈方法详细教程
  12. 怎样让Excel数据自动标记颜色?学会这一招让大家对你刮目相看
  13. 博弈论:子博弈精炼均衡(子博弈都是纳什均衡,比纳什均衡更强的概念)
  14. Windows搭建Nginx直播推流服务器
  15. vue-easy-print批量分页打印
  16. ruoyi数据权限设置
  17. 1 Microservice 简介
  18. 【已解决】CSDN无法粘贴图片、截图 或者 上传图片一直显示失败
  19. 杭电信工计算机专业浙江省排名第几,2017杭州电子科技大学专业排名_杭州电子科技大学专业排行榜(2)...
  20. 张艾迪(创始人):创始人故事无限N个

热门文章

  1. centos 7(桌面应用)-桌面的应用合集
  2. 饥荒如何修改服务器人数上限,饥荒联机版房间人数上限可以修改吗?怎么更改房间人数?...
  3. 女测试工程师的成长(1-4)
  4. High Performance Visual Tracking with Siamese Region Proposal Network 论文学习
  5. 祭 事 本
  6. python好学吗-python容易学么
  7. excel怎么批量插行_excel怎么批量隔行插入一行空白行?
  8. 同局域网 手机访问本地服务器
  9. 【2023】浙江大学计算机考研信息汇总
  10. 仿网易云音乐 web 版 vue-163-music