坑逼的 iOS 11数组语法糖
2018-01-22 本文已影响80人
游城十代2dai
0x00 题记
最近老板买了一套直播代码, 在运行 iOS 端的时候一堆问题, 主要是因为 iOS 11的, 有一些是后台问题(域名接入问题), 还有一些是 SDK 比较老了, 老的原因还是因为 iOS 11默默的改了底层内容, 然后比较贴近的错误就是数组语法糖取值问题!!!
0x01 简单说些其他问题
- A _这个
select
方法需要声明:
错误内容: Declaration of 'select' must be imported from module 'Darwin.POSIX.sys.time'
解决办法: 引入头文件 #include <sys/time.h>
原因是: Xcode 9 放弃了 select 方法, 必须引入 sys/time.h
-
B _在七牛SDK 中的报错
错误内容: check_compile_time() expected parameter declarator
解决办法: 将 check_compile_time 修改为 __Check_Compile_Time
原因是: Xcode 9 中 usr/include/AssertMacros.h 这个路径文件内的宏不一样了原始写法为 __Check_Compile_Time
- C _iOS 11 navigationBar 透明问题
在项目中, 对 navigationBar 的子视图遍历 hidden 了一遍, 但是 iOS 11 的时候就出问题了, 结果查找发现 iOS 11可以不管 _UIbarBackground 的 alpha, 其本身就是透明色, 改变其 subview 的 alpha 就好了
UIView * barBackground = self.navigationController.navigationBar.subviews.firstObject;
if (@available(iOS 11.0, *)) {
[barBackground.subviews setValue:@(0) forKeyPath:@"alpha"];
} else {
barBackground.alpha = 0;
}
0x02 数组语法糖问题
-
事件: 在 iOS 11之前的语法糖取值实际上执行的方法是:
如图对比objectAtIndex
, 然而在 iOS 11执行的是objectAtIndexedSubscript
方法:
-
起因: 这套代码中做了很多数组越界等处理, 非常不错, 很多地方可以很安逸的使用, 但是 mmp 的 iOS 11不行了, 有人说是 Xcode 9 的问题, 不管是谁的问题...
Runtime 处理异常
-
经过: 百度查了一堆 "废话", 同样的
百度结果keyword
在 Google 上就是不一样😂
Google 结果 -
结果: 通过版本判断一下进行更换的方法, 天知道 iOS 12 抑或 Xcode 10 或不会在有什么改变呢😂
2018年03月30日 由于 HOOK 出现莫名的 crash
// 错误信息
-[UIKeyboardLayoutStar release]: message sent to deallocated instance 0x1489ab450
// crash 场景, 使用 Runtime 处理异常, 所有用到键盘的地方, 使用键盘后, 在用 home 键进入后台, 就是报这个错误, 控制台是有的
这个错误是因为使用了 HOOK 导致 ARC 大姨妈了, 所以需要将使用到的 Runtime 处理异常代码文件用 -fno-objc-arc
标记起来, 这样就不会 crash 了
还有标记后, build 可能报下面这个错误:
// 我这里是 RAC 的几个文件出现的错误, 解决办法如下
Cannot create __weak reference in file using manual reference counting