开发中常用的Xcode快捷键
一句话总结:
理清脉络,熟能生巧,东西用熟练了,就是自己的。
对文件的操作
- 对文件的增,即增加文件、增加文件夹、增加项目。
- 对文件的删,即关闭窗口、移除到项目外、删除到垃圾桶。
- 对文件的改,即打开文件、保存文件、另存为。
- 对文件的查,即查找到某个类、查看刚刚浏览、头文件和实现文件来回切换
增 | 删 | 改 | 查 |
---|---|---|---|
command+N(增文件) | command+W(关闭窗口) | command+O(打开) | command+shift+O(查某个类) |
command+option+N(增文件夹) | Remove Reference(在xcode中移除,【但文件还在项目中】) | command+S(保存) | command+control+左/右键(按刚浏览的顺序退/进) |
command+shift+N(新建项目) | Remve to Trash(直接删除到垃圾桶,【文件不在项目中】) | command+shift+S(另存为) | command+control+上/下键(h和m文件间切换) |
对代码的操作
- 对代码的增,即直接编写、复制、黏贴。
- 对代码的删,即删除一个字符、删除一行字符。
- 对代码的改,即代码缩进、代码移动、格式化代码、注释、撤销、调试、选中。
- 对代码的查,即定位到某个方法、定位到某一行、定位到行头行尾、定位到最顶最后、光标定位在中央、搜索某个关键字
增 | 删 | 改 | 查 |
---|---|---|---|
command+C(复制) | control+K(删除光标右边的左右内容) | command+[ (左缩进一个tab,可以直接按tab键) | control+6(定到某个方法) |
command+V(粘贴) | control+D(删除光标右边一个字符) | command+] (右缩进) | command+L (定到具体某一行) |
command+ option +[ (代码往上交换,移动一行) | command+方向键左/右(定位到首行/行尾 | ||
command+ option +] (代码往下交换,移动一行 ) | command+方向键上/下(定位到类文件第一行/最后一行) | ||
command+ i (格式化代码) | control+L(将光标定位窗口居中处,方便观看代码上下文) | ||
command+/ (注释) | command+F (搜索某个关键字) | ||
command+Z (撤销) | |||
command+R (运行) | |||
command+. (停止) | |||
command+shift+B (编译) | |||
command+ \ (设置断点) | |||
command+shift +键盘左键(光标定位在右边,换完之后全选该行) | |||
command+shift +键盘右键(光标定位在左边,换完之后全选该行) | |||
command+A(全选) |
对代码编辑区的操作
将不必要的功能面板尽可能的隐藏,需要用到的时候才调用出来即可。操作的功能就是:
- 隐藏编辑区左边
- 隐藏编辑区右边
- 隐藏编辑区下面
- 将Xcode全屏
- 将Xcode隐藏
- 打开/关闭双视图
编辑区 |
---|
command + 0(数字)(隐藏/显示代码编辑区左边) |
command+ option + 0(数字)(隐藏/显示代码编辑区右边) |
command+ shift + Y(数字)(隐藏/显示代码编辑区下面) |
command+ control + F(全屏) |
command+ H (隐藏xcode /command +tab出现) |
command+ option + enter (打开双试图) |
command + enter (关闭双试图) |
对模拟器的操作
- 回到首页: command + Shift + H 按一次
- HOME键摁两次: command + Shift + H 按两次
- 旋转 :command + 左/右
- 调整模拟器大小: command + 1, 2, 3, 4, 5
- 模拟器(显示)不显示键盘: command + k
- 启用/关闭从电脑键盘输入:cmd+shift+k
- 截屏: command + S
- 复制屏幕: command + control + C
- 粘贴: command + V
- 隐藏模拟器: command + H
- 关闭模拟器: command + Q
- 模拟锁屏:command + L
- 屏幕解锁:先按 command + shift + H, 再滑动解锁
- 双指拖动手势:option + shift
- 双指缩放手势:option
模拟慢速网络(弱网环境)
模拟器可以通过 Charles工具来模拟慢速网络
真机,设置 》开发者 》Status 》Network Link Conditioner 如果手机设置没找到该选向,可以尝试连接电脑,用Xcode 的Origanizer将其设置成测试设备
内存泄露检查工具
项目中存在的内存泄露问题的检测做了一些总结,一些检测工具的使用及简单内存泄露问题的处理。
- Analyzer(静态分析)
- MLeaksFinder (第三方工具)
- Instruments Leaks (动态检测)
Analyaer
不需要运行程序,通过 Product->Analyze 或快捷键 command+shift+B 进行代码分析。
分析代码上下文的语法结构和内存情况,找出代码中潜在错误 Analyzer主要分析四种问题:
- 逻辑错误:访问空指针或未初始化的变量等;
- 内存管理错误:如内存泄漏等;
- 声明错误:从未使用过的变量;
- API 调用错误:未包含使用的库和框架。
在我做南莲园池导航定位项目用到 CoreLocation 框架的需要手动释放问题,就是通过 Analyzer 检测出来的。
对于App 的整体性能,以及持续定位的节能上有了很大的进步
说明: Analyzer由于是编译器根据代码进行的判断, 做出的判断不一定会准确, 因此如果遇到提示, 应该去结合代码上文检查一下;还有某些造成内存泄漏的循环引用通过Analyzer分析不出来。
MLeaksFinder
1 | pod 'MLeaksFinder' |
或将下载的 MLeaksFinder 文件导入工程中,
在 MLeaksFinder.h 中 设置是否开启内存泄漏检测,以及是在模拟器中开始还是在真机中开启。
1 | //***内存泄漏控制开关,注释该行代码打开内存泄漏工具,打开该行代码关闭内存泄漏**** |
具体操作步骤:
不断重复 push 和 pop 同一个 UIViewController,一旦有疑似内存泄漏的地方,就会弹出提示框,控制台也会输出调用栈的层级信息:
1 | [文件:MLeaksMessenger.m 行数:36] Memory Leak: ( |
展示视图自上而下的调用层级,这里需要注意一些三方 SDK 控件导致的疑似泄漏,可能会因其内部的 cache 机制或者释放不及时而被误判为内存泄漏。
Instruments Leaks
- Xcode 中 按住 command + I 或者菜单栏 Product – Profile
- 双击 Leaks 或者按 choose,打开 Leaks 面板
- 在显示的 Leaks 面板中,点击左上角红色点,即可运行内存检测
- 在运行过程中如果发现Leak Checks(如图)出现红色X说明检测到内存泄露,将鼠标点击Leak Checks,在下方即可看到内存泄漏的相关信息
定位内存泄漏代码位置
- 选择 Leaks 有时候默认是 Run lssues,这时需要将其切换为 Leaks
- 选择 call Three
- 此时,仍然看不到具体的代码位置,需要选择底部的 Call Tree,在弹窗中选择 Invert Call Tree 和 Hide System Libraries,即可显示出具体内存泄漏的代码
Call Tree 四种选项具体含义:
- Separate by Thread:按线程分开做分析,这样更容易揪出那些吃资源的问题线程。特别是对于主线程,它要处理和渲染所有的接口数据,一旦受到阻塞,程序必然卡顿或停止响应。
- Invert Call Tree:反向输出调用树。把调用层级最深的方法显示在最上面,更容易找到最耗时的操作。
- Hide System Libraries:隐藏系统库文件。过滤掉各种系统调用,只显示自己的代码调用。
- Flattern Recursion:拼合递归。将同一递归函数产生的多条堆栈(因为递归函数会调用自己)合并为一条。
- 注意:Core Foundation 等底层操作它们不支持 ARC,还需要手动内存管理对象的创建和释放。
CLLocationCoordinate2D 是 系统框架 CoreLocation 中 一个 C 的 结构体,包含经度和纬度两个值 (CLLocation 是一个 objc 的 对象),需要通过 free 手动释放。这里需要注意以 Core 开头的系统框架的内存管理。
双击选中行,带有定位箭头的即可跳转 Instrument 中具体的代码
- 如果没有定位箭头怎么办?
- 点击项目工程文件-Buidl Setting-All-搜索Debug Information Format-Debug里选择DWARF with dSYM File
- 默认情况下,只有 release 环境下为 DWARF with dSYM File,其他环境均为 DWARF。当 Debug Information Format 为 DWARF with dSYM File 的时候,构建过程中多了一步 Generate dSYM File,最终产出的文件也多了一个 dSYM 文件。然后,重新编译启动 Instruments Leaks,重复以上步骤即可定位到具体代码。