美文网首页
iOS学习(二十九)经验篇 -- 如何查文档、如何持续学习

iOS学习(二十九)经验篇 -- 如何查文档、如何持续学习

作者: 圆脸黑猫警长 | 来源:发表于2021-06-17 15:56 被阅读0次

本篇源于对一个监听键盘通知的处理。

监听键盘高度代码十分简单:

// 添加监听  
 [[NSNotificationCenter defaultCenter] addObserver:self 
                                          selector:@selector(keyboardChange:) 
                                              name:UIKeyboardWillChangeFrameNotification object:nil];

// 处理事件
- (void)keyboardChange:(NSNotification*)notifiction{
    
    CGFloat during = [notifiction.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];
    CGRect begin = [notifiction.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue];
    CGRect end = [notifiction.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGFloat diff = end.origin.y - begin.origin.y;
    
    if (diff == 0) 
        return;
    }
    else if (diff < 0) {
        // 上升  键盘的高度包含了安全区高度
        // code...
    } else {
        // 下降
       // code...
    }
}
问题是:是否需要销毁监听?

看到的很多帖子都写了[[NSNotificationCenter defaultCenter] removeObserver:self]; 这样的代码。
然而,我们看文档里的说法:

NSNotification.png

意思就是iOS 9.0 往后,这样的方式不用主动去取消监听,系统会自动清除这个监听者在下次发出这个通知的时候。猜想,这里系统对observer采用了弱引用的方式,当前的viewcontroller 销毁后,系统保存的observe就变成了nil,这样,先去判断是否是nil,如果是nil就移除即可。

这里不是想说代码应该怎样去写,而是引出者如何查文档的问题,因为笔者发现一个问题:
很多开发者竟然认为注释就是文档。比如我们进入系统的这个类,看到如下内容,然后就认为这个类没什么文档,只有最下面绿色的那两行说明。


注释.png

当光标放到方法的最后时,注意光标的位置(左边箭头),真正的文档在右边就会显示:


文档.png

右边红框中的内容才是真正的文档。可以看到有很多文字性的说明,这才是我们需要去看的地方。点击右下角的Open in Developer Documentation可以打开独立的文档窗口,可以更方便的查看。

一、查看文档:
1.在线文档
1.1>旧版在线文档:文档地址

虽然苹果明确说明了该文档已经过期,但左侧的结构更方便查找,往往结合新版的使用,作为查找的备选方案。

旧版在线文档.png
1.2>新版在线文档:文档地址
2.本地文档

打开Xcode,按Command + shift + 0 ,即可看到本地文档。


本地文档.png
二、如何使用文档

参考下面两篇文章,本文不再赘述:
参考1
参考2

三、如何保持进步

正如本文一开始的遇到的问题一样,开发中经常会这样的小问题,通常会选择简单的百度一下去解决,而忽略了文档(有时候文档也写的不清晰,这就需要仔细去写代码测试辨别),就跟着别人的帖子写了很多不必要的代码,甚至是错误的代码。

仔细想想,这其实是一个开发者不探索代码原理的必然结果:

只要别人的代码有用,拷贝过来改改就行了,中间有什么问题等出了再说。而不去探究别人代码的逻辑、思路。长此以往,水平就被固化了,也难有进步。
如何保持进步?答案也很简单: 保持好奇心并持续探索。遇到疑问就去查,去探究,去分析,去追根问底。

要做到这些并不容易,需要毅力和耐心,以及长时间的积累。

有时候我们会感觉到自己基础不好,然而又说不上来哪里不好,往往就是这一步做的不够。

在经过上述一段时间的沉淀后,就会对系统级别的API就有了理解,对原理也清楚了许多。写代码也更有底气,甚至有点随心所欲起来。注意,到这里其实已经有了很大的成长,也为后续拓宽打下了基础(原理往往都是类似的)。

再往后就会有对写法、结构的疑问,这时往往就摸到了设计模式的边缘,去研究不同的设计模式,去理解,去设计,去比较,在设计模式上去沉淀。

再往后就需要去尝试其他的技术栈,比如 js、node、java、c++等, 去感受其他语言的设计。通过学习其他技术栈提升自己的对原有技术栈的理解。有人肯定觉得奇怪,我的回答是不要怀疑,做就是了,很快你就会理解这一点。

再往后,笔者还没达到那样的高度。可以隐约感受到的是去学习大量优秀开源库、开源框架的源码,在架构上去沉淀。

以上就是笔者自己学习的一个过程,体会最深的就是一个东西不管多难多复杂都不要紧,一定要有持续探究的勇气和耐心。

笔者曾经写过一段时间的Vue,学习的方法就是上面这样,一步一步从教程和文档中沉淀,很快就发现和公司中其他原本写前端的人写出的代码的差异。明显可以看出自己的代码更加”官方“,而其他人的野路子就很多。不是说野路子不好,有些问题的确需要一些野路子去处理。 但是,往往这些遇到的问题都是早已有了解决方法。基础的东西就像是公式,业务的东西就像是做题。当公式灵活掌握后,业务这些东西早已不是问题。

以上便是笔者的一点点心得,记录了从遇到问题到反思的过程,希望可以给读者带来一点点启发。

相关文章

网友评论

      本文标题:iOS学习(二十九)经验篇 -- 如何查文档、如何持续学习

      本文链接:https://www.haomeiwen.com/subject/vsmveltx.html