草庐IT

iOS 学习之旅 - OC 篇

红橙Darren 2023-03-28 原文

不知不觉来微信事业群差不多也快一年了,自己学习 iOS 也已有半年,在此记录一下自己的学习过程。很多同学可能想知道从 Android 转到 iOS 公司给了多久的缓冲?大概是一周的样子,那时我还在做 Android 首次拉取消息列表优化的需求,领导突然跟我说我们 iOS 缺人你要不转到 iOS 开发去?当时叫了我和另外一个刚毕业的同学,另一个同学说考虑几天(后来没转),我挺乐意所以当时就说转了。我开始一边做 Android 的需求一边学习 OC 基础,一周后接了两个小需求(不是很难),我们主要是用的 OC 语言,很多同学新项目可能用的是 swift 我目前还没学,因为移动端大部分逻辑都在底层,由于之前写过一点点 C 和 C++ ,所以总的回顾起来压力不算太大。之所以当时非常想转 iOS 主要是想锻炼一下自己,就像去年总结的时候我说:我们不可能只干一个岗位,也不太可能在一家公司干掉退休,当然如果你来腾讯或许可以干到退休,随着年龄的增长我们都不太喜欢变化,希望一直保持现在这样挺好。其实处在任何环境做任何事都是差不多的,好比我在来微信前写的总结文章里说的一样,不在于我们做什么工作,而在于我们做事的方法和套路以及做事的态度。 目前来看我只说对了一半,没想到今年大量裁员,所以以前我时常提醒大家我讲的东西不一定对,大家要自己加以思考。现在我想说的是我讲的东西都是错的。

今年的情况我们也都看到了,各大互联网企业都在降本增效,我们也能从中反思到很多东西。今年我们组也明确说了不裁员但是目前不再新增 HC,我的上个部门,之前的同学说要裁掉 70%(500人留下150人)往后还不知道有没有新动作。很多同学都跟我发了一些消息,这其中还有很多是我当初推荐进来的同学,对此我心里万分抱歉也很难受,如果当初不推荐你过来今天就不会是这种局面,但是人生又没有如果。我在公司 KM 和脉脉上看到了很多不好的言论,有些是怪公司的也有些是怪大环境的等等。因此我觉得有时候技术只是一个方面,更重要其实还是在于修心,不同的心境面对事物会有不一样的感受。Android 的效能优化我们还没讲完,后面我打算每次课都拿 15 分钟的时间,跟大家来分享一些我以前读过的课外书籍。用苏东坡的一首词送给大家:莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去,也无风雨也无晴。 这首词,写于苏轼人生的灰暗时刻,希望同学们日后无论遇到何种人情事变,都能随缘尽性,达观豁达,拥有“一蓑烟雨任平生”的自在从容。

对于整个 iOS 开发我目前只学到了一点点皮毛,当然我也有自己的一套学习计划(类似 Android 进阶之旅),只是目前这形式抽不出太多的时间来学习。已经学完的有些感悟的当属对 OC 的底层原理研究:

  • OC 的历史和本质
  • 了解汇编指令与 LLDB 命令
  • 对象的创建过程、类的本质、元类以及 isa 指针
  • 方法的本质以及方法的查找与转发过程
  • App 启动 Class 与 Category 的装载过程
  • block 的本质探究
  • KVO 与 KVC 的底层原理
  • 多线程与 GCD 的原理
  • OC 的内存管理

内容看起来并不是很多,但是需要一些前提准备工作,我们主要是熟悉两个源码,一个是 objc 的源码一个是 llvm 的源码。关于 objc 的源码配置我这里提供一个 github 仓库大家自己下载就好了,如果大家自己去官网下载配置相当麻烦。我们还需要了解编译与汇编的一些简单知识,这里我们只需要了解一些简单的指令就可以了,因为苹果只开源了部分代码,有些内容我们只能去看汇编,还有比如 OC 方法的执行过程中有部分代码就是汇编写的。后面我会陆续的完成这些文章,关于《 Android 的效能优化》看今年能不能再次启动。目前又做了 iOS 开发,讲起 Android 内容来应该会更有感悟一些,所以我们都不要太急,希望把最好的东西分享给大家。

有关iOS 学习之旅 - OC 篇的更多相关文章

  1. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  2. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  3. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  4. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  5. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  6. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  7. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  8. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  9. ruby - 我如何学习 ruby​​ 的正则表达式? - 2

    如何学习ruby​​的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby​​的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/

  10. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

随机推荐