![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
iOS开发之进阶篇
文章平均质量分 79
iOS开发进阶
tan452301
这个作者很懒,什么都没留下…
展开
-
iOS开发之进阶篇(15)—— CocoaPods
目录CocoaPods 安装CocoaPods 使用CocoaPods 原理简介1. CocoaPods 安装CocoaPods 使用 Ruby 脚本语言编写, 故我们的Mac需要有Ruby环境. 而Mac是自带装有Ruby的, 但是一般版本都比较低, 我们需升级到更新版本.升级Ruby我们需要用到其版本管理工具RVM, 故我们需先安装RVM. 而安装RVM过程会自动通过Homebrew安装依赖包, Homebrew是一款macOS平台下的软件包管理工具.所以我们整个安装顺序依次为 Ho.原创 2020-08-27 16:51:54 · 250 阅读 · 0 评论 -
iOS开发之进阶篇(14)—— 查找内存泄漏
内存泄漏内存泄漏指程序中动态分配的内存由于某种原因未释放或无法释放, 造成系统内存的浪费.比如MRC中如下代码会造成泄漏:NSString *string = [[NSString alloc] init];...// [string release]; // ARC下, 编译器自动添加此代码但由于ARC机制, 编译器会在适当的时机帮我们加上release代码, 避免了内存泄漏. 不过即使在ARC中也有肯能因对象不释放而引起内存泄漏, 比如使用CF框架下的对象而没有做CFRelease操作.原创 2020-08-25 15:49:59 · 887 阅读 · 1 评论 -
iOS开发之进阶篇(13)—— MVC / MVP / MVVM / VIPER 架构
目录概述MVCMVPMVVMVIPER结语概述本文基本转译自这篇博文 iOS Architecture Patterns.事实上, 网上大多数关于讨论这几个架构的博文, 均出自于此.本文将惜字如金般、直截了当地抛论点, 上代码.祝各位看官阅读愉快!!如题, 我们将对 MVC / MVP / MVVM / VIPER 这四个常用iOS架构进行一一讨论.先来看看它们之间的综合对比:图中三个对比要素分别为:各实体(指Views/Models/Controller/Presenter/Vi.原创 2020-08-21 18:11:05 · 364 阅读 · 0 评论 -
iOS开发之进阶篇(12)—— 屏幕适配
目录1. layoutSubviews2. Constrain to margins3. Constraints4. safeAreaLayoutGuide5. Masonry6. SnapKit1. layoutSubviews如果我们在viewDidLoad里加载一个view, 可能最终呈现的frame与我们所设置的不一致. 又或者我们旋转了屏幕, 界面没有被适配. 这些情况下, 我们就需要在layoutSubviews中重新指明frame布局.为了验证调用顺序, 我们将重写viewControl原创 2020-08-19 18:57:33 · 507 阅读 · 0 评论 -
iOS开发之进阶篇(11)—— 数据存储
目录1. `NSFileManager / NSFileHandle` 文件管理2. `writeToFile` 写入.plist文件3. `NSUserDefaults` 用户配置4. `NSKeyedArchiver /NSKeyedUnarchiver` 归解档5. `NSBundle` 资源文件包6. `Keychain` 钥匙串7. `fwrite / fread` C标准库输入输出8. `SQLite3 / Core Data / FMDB` 数据库8.1 `SQLite3`8.2 Core原创 2020-08-17 17:38:46 · 471 阅读 · 0 评论 -
iOS开发之进阶篇(10)—— Timer
目录概述1. NSTimer (Timer)2. CADisplayLink3. GCD概述本文将要讨论以下三种timer:NSTimer (Timer)CADisplayLinkGCD原理计时好比数数, 在iOS中, 数数的人是系统内核.内核会根据一些设定好的条件 (比如按时) 产生相应事件, 然后通过回调函数向外抛出 (可理解为"报时"). 我们通过注册观察者来监听取得这些回调, 从而达到计时的目的.这些与时间相关的事件的载体叫做事件源 (Source), iOS中有两种 Sour原创 2020-08-12 11:04:01 · 337 阅读 · 0 评论 -
iOS开发之进阶篇(9)—— runtime运行时
目录前言iOS编译流程runtime介绍为何要有runtime何为runtimeruntime原理1. id --> objc_object2. Class --> objc_class3. Meta Class 元类4. Ivar 成员变量 和 objc_property_t 属性5. Method / SEL / IMP 方法6. Category消息发送流程消息转发流程1. 动态方法解析2. 接收者重定向3. 消息重定向Method Swizzling参考文档前言关于runtime的文原创 2020-08-05 15:35:51 · 837 阅读 · 0 评论 -
iOS开发之进阶篇(8)—— Run Loops
引用Apple文档 – Run Loops深入理解RunLoopiOS刨根问底-深入理解RunLoop首先感谢ibireme及KenshinCui两位大神对Run Loops做出的探讨和总结. 本文将大量地直接或间接引用自以上三个出处的内容, 是对这三篇文章的一个理解和整合. 如需更加深入了解Run Loops, 还请单击上文引用链接.目录引用了解Run Loops概念Run Loops与线程关系CFRunLoop相关类CFRunLoopRefCFRunLoopModeRefCFRunLoopSo原创 2020-07-22 11:12:06 · 247 阅读 · 0 评论 -
iOS开发之进阶篇(7)—— Block中的 weakSelf & strongSelf
目录1. 概述2. 自定义block2.1 情况一2.2 情况二2.3 情况三2.4情况四3. 系统block3.1 GCD3.2 UIView3.3 网络请求4. 何时使用 weakSelf & strongSelf ?1. 概述之前有写过一篇博文: Block但当时没有具体讨论何时该使用weakSelf, 何时又该使用strongSelf. 我们现在就从多个常用场景中来讨论, 如何使用self的强弱引用来避免block的循环引用问题.众所周知, 由于对象之间循环强引用, 导致对象在作用域原创 2020-06-23 18:54:58 · 704 阅读 · 0 评论 -
iOS开发之进阶篇(6)—— 单元测试(Unit Tests 和 UI Tests)
版本Xcode 11.5目录版本1. 概念1.1 单元测试1.2 测试用例1.3 断言2. 准备工作3. Unit Tests4. UI Tests1. 概念1.1 单元测试单元测试是指对软件中的最小可测试单元进行检查和验证. Xcode中有两种单元测试 (Unit Tests 和 UI Tests), Unit Tests 用于测试功能模块; UI Tests用于测试UI交互.Unit Tests 用于测试功能模块, 这些功能模块应尽量单一, 避免与其他功能耦合. 比如测试一个比大小的函数原创 2020-06-18 19:09:06 · 1024 阅读 · 0 评论 -
iOS开发之进阶篇(5)—— 单例
目录1. 最终推荐写法2. 何为单例?2.1 单例概念2.2 几个官方单例2.3 单例原理3. 对象的创建4. 单例写法的讨论过程参考1. 最终推荐写法SingleObject.h#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface SingleObject : NSObject+ (instancetype)sharedInstance;@endNS_ASSUME_NONNULL_END.原创 2020-06-17 15:22:40 · 225 阅读 · 0 评论 -
iOS开发之进阶篇(4)—— 语言本地化(国际化)
目录1. 准备工作2. 字符串本地化3. 图片本地化3.1 图片名称本地化3.2 图片本地化4. App名称/系统权限提示框本地化6. 多人开发中本地化7. 应用内切换语言1. 准备工作本文以中英文切换为例. 因为系统默认语言是英文, 所以我们需要添加中文到项目中.打开PROJECT:添加简体中文:需要注意的是, 这一步必须要选一个文件进行本地化, 不然语言添加不成功:添加完成:新建Strings文件:取名Localizable.strings (系统默认名):然后点击新建的原创 2020-06-16 14:35:36 · 1043 阅读 · 0 评论 -
iOS开发之进阶篇(3)—— 版本控制
目录前言本地仓库 (使用Sourcetree)1. 创建本地仓库2. 新增版本3. 分支4. 版本回退5. Sourcetree&Git部分名词解释远程仓库 (使用GitHub)1. 上传 (Push)2. 下载 (Pull)3. GitHub客户端前言本文仅简单讨论代码的版本控制, 包括版本提交、分支、远程仓库的拉取/推送、版本回退等, 不探讨Git指令, 不涉及多人协作, 更多的是客户端使用过程的记录.分别使用Sourcetree和GitHub客户端实现对代码的版本控制, 两者操作起来都差原创 2020-06-11 15:35:33 · 346 阅读 · 0 评论 -
iOS开发之进阶篇(2)—— 本地通知和远程通知 (使用APNs)
版本iOS 10+目录版本一. 概述二. 通知的管理和配置设置代理请求权限添加通知按钮自定义警报声音管理已发送的通知三. 本地通知四. 远程通知 (使用APNs)原理准备工作流程1. 开启推送通知功能2. 生成APNs AuthKey3. 代码部分4. 模拟服务器发送通知5. 修改通知内容和显示界面1. 创建以及注意事项 (重要)2. UNNotificationServiceExtension3. UNNotificationContentExtensiondemo地址参考文档一. 概述由于iO.原创 2020-06-08 19:07:27 · 1127 阅读 · 0 评论 -
iOS开发之进阶篇(1)—— 证书、打包上架流程、p12文件
目录版本证书Apple DevelopmentApple DistributionApp打包上架流程App Store部分Xcode部分.p12文件版本Xcode 11.3.1证书iOS开发相关的证书有很多种,iOS开发证书(iOS App Development)、iOS发布证书(iOS Distribution (App Store and Ad Hoc))、网站推送ID证书(We...原创 2020-03-13 18:41:07 · 2800 阅读 · 0 评论