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

作者: Jerry_WJ | 来源:发表于2017-03-29 23:36 被阅读88次

    《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开发进阶》--读书笔记

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