iteatimeteam / Friday-QA

iTeaTime |技术清谈 微信群每周五问答环节
MIT License
229 stars 19 forks source link

iTeaTime(技术清谈【-006期】【代号:西部世界】 #15

Open ChenYilong opened 5 years ago

ChenYilong commented 5 years ago

iTeaTime(技术清谈)【-006期】【代号:西部世界】

主题:iOS13适配专辑 出品人:GitHub@ChenYilong





enter image description here


请对以下【iOS13】标签的问题均为 iOS13 新特性已经引入的新适配问题,发表你的看法,内容不限,必须包括需要适配的解读以及方案,引用的文章需要给出参考链接,必须给出自己的见解:

1 【问题】【iOS13】SwiftUI


2 【问题】【iOS13】iPadOS app for macOS


3 【问题】【iOS13】LBS:Location authority


4 【问题】【iOS13】faster app launch、smaller app updates


5 【问题】【iOS13】Sign in with Apple


6 【问题】【iOS13】iPadOS


7 【问题】【iOS13】Reactive Programming in iOS13


8 【问题】【iOS13】Independent apps on Apple Watch


9 【问题】【iOS13】Dark Mode


10【问题】【iOS13】AR


12【问题】【iOS13】新系统 KVC crash 风险


13【问题】【iOS13】模态界面默认交互改变


14【问题】【iOS13】App Delegate --> Scene Delegate


15【问题】【iOS】【hybrid】针对 RN 开发人员不熟悉native开发的情况下,会出现很多操作,比如绘制一个3000px的cell,cell重用符号滥用,在scrollView上强行拼view而不用tableView,等等,针对这些情况,你作为一个native的开发,怎么避免或者及时预警?

【难度】🌟🌟🌟🌟 【出题人】 大灰灰-平安-iOS-上海


16【问题】【iOS13】SF Symbols in iOS 13


17【问题】嵌套进native的 web 页面,如何展示用户相册图片?

【难度】🌟🌟🌟 【出题人】 颜-物灵-iOS

//one more thing


18【问题】【iOS13】remove 3D touch


19【问题】【iOS13】CryptoKit


20【问题】【iOS】【hybrid】WKWebView 加载本地文件如何做兼容?

【难度】🌟🌟 【出题人】PlutoY-广州YY


21【问题】【iOS】【hybrid】调用 js 绘图库的情况下,调用 js 绘图通过以下方式调用会出现什么情况, 该怎么解决

- (void)webViewDidFinishLoad:(UIWebView *)webView {
     // 调用 js 绘图
}

// 或者

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
    // 调用 js 绘图
}

【难度】🌟🌟 【出题人】 PlutoY-广州YY


22【问题】【iOS】【Android】【hybrid】如何用 js 创建一个原生的 Label 居中显示到某个 ViewController/ activity 上,可以通过 JS 修改 Label 的 text 属性,iOS版本代码如下:

var label = new Label();
label.text("Lefe_x");

// view 为 App 当前显示的 ViewController 的 view,通过 js 获取。
label.addToSuperView(view);

【难度】🌟🌟🌟 【出题人】 百度阅读-Lefe_x


23【问题】【iOS13】NotificationCenter


24【问题】【iOS13】Network


25 【问题】【iOS】 setNeedsLayoutlayoutIfNeeded 调用后,系统布局执行刷新的时机是怎么样的? 如果两个方法同时调用会有什么效果与问题?

    [self setNeedsLayout];
    [self layoutIfNeeded];

【提示】请问各位大佬,团队里写代码随意,很多地方都调用了setNeedsLayout,触发了界面刷新,能不能像前端那样弄个虚拟dom减少频繁刷新对性能的影响?" 看到有些人代码每次setModel都要setneedslayout一下 不知道为啥

【答案】

iTeaTime(技术清谈)@SAGESSE-深圳-某不知名小作坊:

如果同时使用就是强制重新布局。

调用setNeedsLayout是为了减少layoutSubviews的执行次数,如果set一次就修改布局一次,很浪费性能, 所以系统提供了setNeedsLayout来标记这个区域是否需要重新布局,在下一周期时会调用layoutIfNeeded方法,当检测到标记时调用layoutSubviews进行重新布局。

一般主动调用layoutIfNeeded提前布局是在需要获取位置或者生成动画才需要,所以建议延迟布局。

Q:还有没有像虚拟dom那样计算真正变化 的ui的?

A:系统的layoutSubviews本身就是在计算有没有真正变化

Q:但是里面全部UI都在里面计算了。相同的计算会导致UI刷新么。

A:系统的不会,随非你手动调用setframe/setcenter/setbounds。

Q:像在layoutsubviews里面很多这样写`self.contentView.frame = CGRectMake(25, (SCREENHEIGHT - 280) / 2, SCREENWIDTH - 50, 280); 即使每次相同都会导致刷新吧

A:的确会导致页面刷新, 所以建议检查一下值是否发生了变化再set 比如:

CGRect nframe = ...;
if (!CGRectIsEqual(self.contentView.frame, nframe)) {
   self.contentView.frame = nframe;
}

Q:强行这样判断导致开发效率降低了

A:是很麻烦,但系统己经提供了一套很好的解决方案,自动布局autoresizingMask和约束。它们只在需要的时候才会进行布局。

如果只是setneedlayouts self.view不影响subview的


26 【问题】【iOS】如何借助Xcode搜索所有在block内部的self 单词,借此来排查内存泄漏?

【提示】用instrument工具检测内存泄漏不是更方便吗? 检查不出,很难才出现一两次。但是确实存在,就是不知在哪个地方。几天测试才出现两次。所以才有这个挫招扫描。 【答案】

iTeaTime(技术清谈)@SAGESSE-深圳-某不知名小作坊:

\^(\s*\(.*\)\s*)?\{(.|\n)*?\bself\b[^}]*\}

可能会有误匹配,因为xcode居然不支持平衡组,不然,不可能有误匹配。

一般国际化需要这种方式搜字符串替换。


参考链接:

标题&链接 手机端阅读
标题:iOS13 Compositional Layout
链接:https://juejin.im/post/5d00c430f265da1b8466de01
标题&链接 手机端阅读
标题:iOS 13 升级体验
链接:https://juejin.im/post/5d2587da6fb9a07ed524c774

Posted by Posted by 微博@iOS程序犭袁 & 公众号@iTeaTime技术清谈 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

--------------------------------------------

One more thing...

【非礼勿视】以下为彩蛋部分,建议28岁以上男性观看

-------------------------------------------- ![](http://t1.hxzdhn.com/uploads/tu/201807/9999/75a6bc00ee.jpg) //*one more thing*
xiaoheiai4719 commented 5 years ago

【iOS】如何借助Xcode搜索所有在block内部的self 单词,借此来排查内存泄漏? Masonry的也同时 校验出来的。