自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

看影成痴

学而时习之

  • 博客(75)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 Flutter开发(2)—— 第一个App

本文示例开发环境: Mac 11.2.3 / Android Studio 4.1.2教程相关:官网: https://flutter.dev/中文资源主页: https://flutter.cn/GitHub: https://github.com/flutter/flutterbilibili视频教程: https://www.bilibili.com/video/BV1S4411E7LY?p=25&t=5在 macOS 上安装和配置 Flutter 开发环境https://flu

2021-04-13 10:51:09 216

原创 Flutter开发(1)—— Dart vs Swift

原文链接: https://medium.com/coding-with-flutter/dart-vs-swift-a-comparison-6491e945dc17发表日期: 2018.12.27Dart和Swift是我最喜欢的两种编程语言。我已经在商业和开源代码中广泛使用了它们。本文提供了Dart和Swift的并排比较,旨在:突出显示两者之间的差异。为开发人员从一种语言转移到另一种语言(或同时使用两种语言)提供参考。一些背景:Dart支持Flutter(Google的框架),该框.

2021-04-12 20:24:30 486

原创 Flutter开发(0)—— 认识各种跨平台框架

文章目录移动App分类Web appsProgressive web appsNative appsHybrid apps各种跨平台框架本机和跨平台之间的区别各平台GitHub stars结语移动App分类Web apps:指通过网络浏览器通过网络(如Internet)访问的应用程序。Progressive web apps (WPA):指那些使用指定技术和标准模式来开发的web应用,这将同时赋予它们web应用和原生应用的特性。Native apps:以特定编程语言针对特定设备平台(iOS或An.

2021-03-10 16:59:10 335 1

原创 iOS开发之网络通信(6)—— AFNetworking & Alamofire

AFNetworking:OC,✩33.1kAlamofire:Swift,✩35.3k文章目录1. AFNetworking1.1 Data Task1.2 Upload Task1.3 Upload Task for a Multi-Part Request1.4 Download Task1.5 Request Serialization2. Alamofire2.1 简单请求2.2 下载2.3 上传1. AFNetworkingcd到工程目录:cd /Users/kang/Desktop.

2021-03-09 15:10:58 514

原创 iOS开发之网络通信(5)—— CocoaAsyncSocket

CocoaAsyncSocket是一个异步socket库,提供了macOS、iOS和tvOS版本,其底层基于BSD socket。本文简单介绍Swift下TCP和UDP用法。1. UDP// 创建socketself.udpSocket = GCDAsyncUdpSocket(delegate: self, delegateQueue: .global())do { // 绑定端口 try self.udpSocket?.bind(toPort: UInt16(port)) .

2021-03-04 15:48:17 1362 1

原创 iOS开发之网络通信(4)—— socket

文章目录一. Stream socket二. BSD Socket1. UDP2. TCPsocket是一种抽象层编程接口,用于应用程序间通过网络协议进行通信。其实现方式主要有两种:TCP和UDP。关于TCP和UDP,前文有介绍了:iOS开发之网络通信(1)—— 计算机网络。iOS中,根据不同语言有不同的方法来创建socket连接:C:CFStream。OC:NSStream。Swift:Stream。OC中的NSStream和Swift中的Stream类都是对CFStream的封装,而C.

2021-03-02 14:52:19 899 1

原创 iOS开发之网络通信(3)—— XML & JSON

XML 与 JSON 优劣对比文章目录一. XML1. XML简介2. XML语法3. XML解析4. 代码部分二. JSON1. JSON简介2. JSON语法3. 代码部分3.1 JSON编码3.2 JSON解码3.3 JSON 与 Foundation 互转一. XML1. XML简介XML 指可扩展标记语言(eXtensible Markup Language)。XML 被设计用来传输和存储数据;HTML 被设计用来显示数据。XML 标签没有被预定义,您需要自行定义标签。XML 被设.

2021-02-24 15:38:53 266

原创 iOS开发之网络通信(2)—— HTTP(S)

文章目录一. HTTP发展史二. HTTP简介三. HTTPS简介四. HTTP与HTTPS区别五. 代码部分1. 简单请求2. 上传数据3. 下载数据4. 后台下载一. HTTP发展史HTTP版本年份新增命令连接方式摘要0.91991GET短连接初版1.01996POST、HEAD短连接 (非标准长连接Connection: keep-alive)1. 可以传输文字,还能传输图像、视频、二进制文件。2. 加入头信息、状态码、多字符集支持、多部分发送、权.

2021-02-23 18:12:46 1430 3

原创 iOS开发之网络通信(1)—— 计算机网络

目录1. 概念2. 分类2.1局域网2.2 城域网2.3 广域网2.4 无线网3. 各种网: 互联网 因特网 以太网 万维网4. 网络模型5. 协议5.1 HTTP(S)5.2 TCP5.3 UDP5.4 TCP与UDP差别5.5 IP6. 其他6.1 ISP6.2 端口引用1. 概念网, 本义指一种用绳线编织成的捕鱼工具. 后来引申指像网一样的东西, 又引申指像网一样纵横交错的系统或组织.计算机网络, 也称计算机通信网, 利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连.

2020-09-18 14:04:03 945

原创 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 244

原创 iOS开发之进阶篇(14)—— 查找内存泄漏

内存泄漏内存泄漏指程序中动态分配的内存由于某种原因未释放或无法释放, 造成系统内存的浪费.比如MRC中如下代码会造成泄漏:NSString *string = [[NSString alloc] init];...// [string release]; // ARC下, 编译器自动添加此代码但由于ARC机制, 编译器会在适当的时机帮我们加上release代码, 避免了内存泄漏. 不过即使在ARC中也有肯能因对象不释放而引起内存泄漏, 比如使用CF框架下的对象而没有做CFRelease操作.

2020-08-25 15:49:59 853 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 347

原创 iOS开发之进阶篇(12)—— 屏幕适配

目录1. layoutSubviews2. Constrain to margins3. Constraints4. safeAreaLayoutGuide5. Masonry6. SnapKit1. layoutSubviews如果我们在viewDidLoad里加载一个view, 可能最终呈现的frame与我们所设置的不一致. 又或者我们旋转了屏幕, 界面没有被适配. 这些情况下, 我们就需要在layoutSubviews中重新指明frame布局.为了验证调用顺序, 我们将重写viewControl

2020-08-19 18:57:33 489

原创 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 461

原创 iOS开发之进阶篇(10)—— Timer

目录概述1. NSTimer (Timer)2. CADisplayLink3. GCD概述本文将要讨论以下三种timer:NSTimer (Timer)CADisplayLinkGCD原理计时好比数数, 在iOS中, 数数的人是系统内核.内核会根据一些设定好的条件 (比如按时) 产生相应事件, 然后通过回调函数向外抛出 (可理解为"报时"). 我们通过注册观察者来监听取得这些回调, 从而达到计时的目的.这些与时间相关的事件的载体叫做事件源 (Source), iOS中有两种 Sour

2020-08-12 11:04:01 323

原创 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 817

原创 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 241

原创 iOS开发之多线程(6)—— 线程安全与各种锁

目录1. 线程安全1.1 线程不安全示例1.2 线程安全1.3 互斥2. 锁dispatch_semaphore 信号量OSSpinLock 自旋锁pthread_mutex 互斥锁pthread_mutex (RECURSIVE) 递归锁pthread_mutex + pthread_cond 条件锁NSLock 互斥锁NSRecursiveLock 递归锁NSCondition 条件锁NSConditionLock 条件锁@synchronized1. 线程安全1.1 线程不安全示例线程可与其同属

2020-07-15 17:41:03 329

原创 iOS开发之多线程(5)—— Pthreads

目录API介绍1. 创建2. 终止3. 线程的分离与合并 (资源管理)线程同步API介绍1. 创建/** thread: 线程ID attr: 线程属性, 一般为NULL start_routine: 新线程入口函数 arg: 入口函数start_routine的参数 (例如使用C++编程时的this指针) 返回值int: 创建成功返回0, 失败返回错误码 */int pthread_create(pthread_t *thread, const pthread_attr_t *attr

2020-07-10 18:20:06 224

原创 iOS开发之多线程(4)—— Operation

目录版本简介操作同步 & 异步队列串行 & 并行基本用法1. 不使用队列2. 使用队列2.1 四种添加操作(任务)方法2.2 其他属性方法2.3 线程间通信版本Xcode 11.5Swift 5.2.2简介我们先来讨论相关理论知识点, 代码部分统一放到后文.Operation基于GCD封装, 完全面向对象. 对应于GCD, Operation也有任务和队列的概念, 只不过在Operation中任务(block)被称为操作(operation).Operation支持以下关键功能

2020-07-09 16:40:42 688

原创 iOS开发之多线程(3)—— GCD

目录版本简介几个概念1. 任务(Task) 和 队列(Queue)2. 同步(sync) 和 异步(async)3. 串行(Serial) 和 并发(Concurrent)4. 主队列(Main Queue) 和 全局队列(Global Queue)GCD的基本使用1. 同步执行 + 串行队列2. 同步执行 + 并发队列3. 异步执行 + 串行队列4. 异步执行 + 并发队列5. 同步执行 + 主队列6. 异步执行 + 主队列死锁版本Xcode 11.5Swift 5.2.2简介Grand Cen

2020-07-01 16:35:50 333

原创 iOS开发之多线程(2)—— Thread

版本Xcode 11.5Swift 5.2.2简介一个Thread即为一个线程.方法属性OC中的属性方法(Swift方法名类似):#pragma mark - 属性 // 可以使用返回的字典来保存线程的特定数据. (这只是一个普通的字典, 用来保存所有开发者感兴趣的数据.)@property (readonly, retain) NSMutableDictionary *threadDictionary;// 线程优先级@property double threadPriority A

2020-07-01 16:31:22 282

原创 iOS开发之多线程(1)—— 概述

目录概述进程(Process) 和 线程(Thread)概述本系列文章将讨论iOS中以下几种多线程编程方式:编程方式语言描述出场率线程周期ThreadOC/Swift轻量级, 简单易用中手动管理GCDC可充分利用设备的多核高自动管理OperationOC/Swift基于GCD封装, 添加了一些实用方法高自动管理PthreadsC可跨平台使用(Unix / Linux / Windows/ macOS等)低手动管理进程(P

2020-07-01 16:29:49 156

原创 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 683

原创 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 970

原创 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 216

原创 iOS开发之进阶篇(4)—— 语言本地化(国际化)

目录1. 准备工作2. 字符串本地化3. 图片本地化3.1 图片名称本地化3.2 图片本地化4. App名称/系统权限提示框本地化6. 多人开发中本地化7. 应用内切换语言1. 准备工作本文以中英文切换为例. 因为系统默认语言是英文, 所以我们需要添加中文到项目中.打开PROJECT:添加简体中文:需要注意的是, 这一步必须要选一个文件进行本地化, 不然语言添加不成功:添加完成:新建Strings文件:取名Localizable.strings (系统默认名):然后点击新建的

2020-06-16 14:35:36 974

原创 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 335

原创 iOS开发之进阶篇(2)—— 本地通知和远程通知 (使用APNs)

版本iOS 10+目录版本一. 概述二. 通知的管理和配置设置代理请求权限添加通知按钮自定义警报声音管理已发送的通知三. 本地通知四. 远程通知 (使用APNs)原理准备工作流程1. 开启推送通知功能2. 生成APNs AuthKey3. 代码部分4. 模拟服务器发送通知5. 修改通知内容和显示界面1. 创建以及注意事项 (重要)2. UNNotificationServiceExtension3. UNNotificationContentExtensiondemo地址参考文档一. 概述由于iO.

2020-06-08 19:07:27 1043

原创 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 2773

原创 iOS开发之Swift篇(15)—— Swift与Objective-C混编

目录版本Swift调用Objective-CObjective-C调用Swift简单分析版本Xcode 11.3.1Swift 5.1.3Swift调用Objective-C新建一个Swift工程,然后新建一个Objective-C文件,然后会有桥接头文件的提示(如果不是新建文件,没有这个提示,我们可以自己创建,后文介绍。):创建之,然后就多了个头文件:Person.h:@in...

2020-03-04 14:48:23 1070

原创 iOS开发之Swift篇(14)—— 协议

目录版本协议语法属性要求方法要求构造器要求委托版本Xcode 11.3.1Swift 5.1.3协议协议规定了用来实现某一特定功能所必需的方法和属性。类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议定义的方法和功能。语法protocol SomeProtocol { // 这里是协议的定义部分}让自定义类型遵循多个协议:struct SomeStruct...

2020-03-03 18:32:44 252

原创 iOS开发之Swift篇(13)—— 扩展

目录版本扩展语法计算型属性方法构造器下标嵌套类型版本Xcode 11.3.1Swift 5.1.3扩展扩展可以给一个现有的类、结构体、枚举、还有协议添加新的功能,但是不能重写已有的功能。Swift 中的扩展可以:添加计算型属性(不能添加存储型属性)定义实例方法和类方法提供新的构造器定义下标定义和使用新的嵌套类型使一个已有类型符合某个协议语法extension Som...

2020-02-28 18:56:33 288

原创 iOS开发之Swift篇(12)—— 构造和析构

目录版本构造过程析构过程版本Xcode 11.3.1Swift 5.1.3构造过程构造过程是使用类、结构体或枚举类型的实例之前的准备过程。这个过程包含了为实例中的每个属性设置初始值和为其执行必要的准备和初始化任务。使用关键字 init对应的, 类的实例也可以通过实现析构器来执行它释放之前自定义的清理工作, 称为析构过程。使用关键字 deinit构造器构造器有很多种类型(称...

2020-02-28 11:26:14 267

原创 iOS开发之Swift篇(11)—— 下标

目录版本下标语法应用版本Xcode 11.3.1Swift 5.1.3下标下标可以定义在类、结构体和枚举中,是访问集合、列表或序列中元素的快捷方式。可以使用下标的索引,设置和获取值,而不需要再调用对应的存取方法。例如,用下标脚本访问一个数组(Array)实例中的元素可以这样写 someArray[index] ,访问字典(Dictionary)实例中的元素可以这样写 someDicti...

2020-02-25 17:49:09 553

原创 iOS开发之Swift篇(10)—— 方法

目录版本方法实例方法self 属性外部参数名称和局部参数名称在实例方法中修改值类型在可变方法中给 self 赋值类型方法版本Xcode 11.3.1Swift 5.1.3方法方法是与某些特定类型相关联的函数。实例方法为给定类型的实例封装了具体的任务与功能;类型方法与类型本身相关联。类型方法与 Objective-C 中的类方法(class methods)相似。在 Objectiv...

2020-02-25 12:01:08 310

原创 iOS开发之Swift篇(9)—— 属性

目录版本存储属性延迟加载存储属性计算属性只读计算属性属性观察器类型属性版本Xcode 11.3.1Swift 5.1.3属性将值与特定的类、结构体或枚举关联。存储属性会将常量和变量存储为实例的一部分计算属性则是直接计算(而不是存储)值属性可以直接与类型本身关联,这种属性称为类型属性。存储属性struct Range { var min = 0.0 var ma...

2020-02-18 22:45:33 366

原创 iOS开发之Swift篇(8)—— 类和结构体

目录版本结构体和类对比类型定义 & 创建实例结构体是值类型类是引用类型恒等运算符指针版本Xcode 11.3.1Swift 5.1.3Swift 中结构体和类的功能很相近,本文中所讨论的大部分功能都可以用在结构体或者类上,因此将两者放在同一篇章里。结构体和类对比Swift 中结构体和类有很多共同点。两者都可以:定义属性用于存储值定义方法用于提供功能定义下标操作用于通过下...

2020-02-16 22:22:56 556

原创 iOS开发之Swift篇(7)—— 闭包

目录版本闭包的定义及使用闭包作为函数参数尾随闭包逃逸闭包版本Xcode 11.0Swift 5.1闭包的定义及使用1. 概念闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的匿名函数(Lambdas)比较相似。其实全局函数和嵌套函数实际上也是特殊的闭包,区别如下:全局函数是...

2019-12-27 10:55:28 271

原创 iOS开发之Swift篇(6)—— 函数

目录版本函数定义与调用参数与返回值参数标签和参数名称函数类型嵌套函数版本Xcode 11.0Swift 5.1函数定义与调用函数是一段完成特定任务的独立代码片段。当你定义一个函数时,你可以定义一个或多个有名字和类型的值,作为函数的输入,称为参数,也可以定义某种类型的值作为函数执行结束时的输出,称为返回类型。函数可以没有参数, 也可以没有返回类型。一般写法func 函数名(形参1,...

2019-12-25 15:57:55 285

我的spring.zip

我的spring.zip

2021-12-17

FFmpeg-iOS_v4.2.zip

本库包含FFmpeg-iOS & x264-iOS, 版本4.2 摘要需要至少50个字, 我今早吃了两个包子喝了一瓶牛奶, 正准备去吃午饭...

2020-09-02

ios-deploy

Install and debug iOS apps without using Xcode. Designed to work on un-jailbroken devices.

2018-05-25

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除