《iOS开发进阶》--读书笔记

《iOS开发进阶》
作者:唐巧

统计分析工具

  • Flurry: 国外软件,专门针对移动的做了优化,统计流量小,数据安全性高

  • 友盟:国内软件,对国内开发者比价友善。现已被阿里收购,当业务涉及到与阿里冲突时,统计数据会有潜在的安全性问题。这也是京东不支持使用支付宝的原因。

  • App Annie : 一款专门为开发者提供,针对App store 的统计分析工具,可以统计下载量、排名变化、销售收入情况及用户评价等。

  • App Figures: 和App Annie 类似的统计分析工具。

崩溃日志记录工具

Crashlytics: 国外软件,信息收集能力强,使用免费,安全。

Xcode 插件管理工具:Alcatraz

可以集成到 Xcode 管理 插件、模板、及颜色配置工具。
安装方法如下图:


IMG_1320.JPG

常用的Xcode 插件

  • KSImageNamed: 自动匹配图片资源名

  • XVim:一个Xcode 的vim 编辑模式插件

  • FuzzyAutocompletePlugin:代码自动补全插件,Xcode 7.3以上的版本现都已支持。

  • XToDo : 一个查找项目中所有带有 TODO, FIXME, !!! 等的标记注释。

  • BBUDebuggerTuchAway:一个当结束调试后,自动隐藏调试窗口的小插件。

  • SCXcodeSwithExpander : 能迅速在switch 语句中填补所有可能的case:的插件。

  • deriveddata-exterminator: 一款可以在xcode 菜单清除xcode 缓存的插件,解决一下奇怪的编译错误信息。

  • VVDocumenter : 一款快速文档注释插件,Xcode 8 现已集成,使用 cmd + option + /
    键即可添加。

  • ClangFormat : 一个自动调整代码风格的工具。

  • ColorSense : 一个使用UIColor 创建颜色时,能实时预览当前颜色

  • XcodeBoost : 包含多个辅助修改代码的小功能,比如:

    • 可以将.m 文件中方法的定义暴露到.h文件中

    • 可以将一个源文件中直接输入正则表达式查找

    • 可以复制粘贴代码时不启用Xcode的自动缩进功能。

  • ImageOptim : 一款图片压缩工具,比Xcode 自带的pngcrush 压缩工具的压缩比率要高。需要给ipa 包瘦身时可以采用此软件。

  • 蒲公英: 一款应用App的内测分发工具,国内软件,使用比较方便

  • xctool : 一个Facebook开源的 iOS 编译和测试工具。纯命令行工具

  • apledoc : 一款从源代码中抽取文档的工具。

内存管理

  • weak 弱引用修饰的对象,虽然持有对象,但是引用计数不会增加,所以可以避免循环引用。

  • 为了兼容非ARC的三方库,可以在compile sources 中为对应的.m 文件增加编译参数 -fno-objc-arc
    来允许对部分文件关闭ARC。

开发技巧

  • UILabel 显示模糊:UIlabel 的frame 的origin 值如果有小数就会参数此问题,修改为整数后即可解决。
  • NSJSONSerialization 比 NSKeyedArchiver 做数据持久化更方便快捷,性能更好
  • UIView 添加动画效果方法是类方法,所以当中的block 绝不会产生循环引用。
  • Xcode 快捷键:
    • cmd + shift + o : 快速查找工程中的类和方法

    • ESC :调出代码补全窗口

注意:
js 文件被拖到工程后,是在编译列表中,而不是在资源列表中,需要手动的调整其位置,否则不能打包到ipa 文件中,解决方法如下:
由于js文件不需要编译,需要将js文件从Compile Source编译列表中移动到 copy Bundle Resources中。

  • 清除DerivedData : 当xcode 缓存异常,莫名出现编译错误时,可以尝试清除这里的缓存数据 ~/Library/Developer/Xcode/DerivedData

  • 为工程增加 Daily Build 脚本

  • 学习一门脚本语言(js、Python),可以提高开发效率,自动化批处理一些繁杂重复性强的事情

  • 代码片段用户内容替换命令:<#输入被替换的内容#>

Block 对象模型

block 内部数据结构定义:

IMG_1323.JPG

解释

  1. isa 指针,所有对象都有该指针,用于实现对象相关的功能
  2. flags , 用于按bit 位表示一下block的附加信息
  3. reserved ,保留变量
  4. invoke ,函数指针,指向具体的block实现的函数调用地址
  5. descriptor,表示该block的附加描述信息
  6. variables ,capture(捕捉)过来的变量,block能够访问他外部的局部变量,就是因为将这些变量(变量的地址)复制到了结构体

OC 中的3各种Block 类型

  • _NSConcreteGlobalBlock,全局的静态block,不会访问任何外部变量。
  • _NSConcreteStackBlock,保存在栈中的block,当函数返回时会被销毁。
  • _NSConcreteMallocBlock,保存在堆中的block,当引用技数为0时销毁。

Block 对外部变量的复制

  • 对于block外的变量引用:block默认是将其复制到其数据结构中来实现访问的。如果这个对象是一个引用类型,则block 会将其引用计数加1

  • 对于__block 修饰的外部变量引用:block 是复制其引用地址来实现访问的。

图示:


IMG_1324.JPG
  • 在ARC中block 只有 NSConcreteGlobalBlock、NSConcreteMallocBlock,这2中类型存在,因为ARC 机制已经能很好的管理对象的生命周期,所以这样的block 类型对于系统来说方便管理。

其他

**适合UIWindow 来实现的功能: **

  • 手势解锁,密码输入界面
  • 应用的启动介绍页
  • 应用内的通知提醒显示
  • 应用内的弹框广告

App 用户登陆密码安全传输策略:

事先生成一对用于加密的公私钥,客户端在登陆时,使用公钥将用户的密码加密后,将密文传输到服务器。服务器使用私钥将密码解密,然后加盐之后再多次求MD5,之后再和服务器原来存储的用相同方法处理过的密码匹配,如果一致,则登陆成功。

你可能感兴趣的:(《iOS开发进阶》--读书笔记)