
移动开发
文章平均质量分 86
a z q
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
React Native 分包及在iOS端分包加载
但是我司的项目是在Hybrid的基础上添加React Native模块,还需要热更新, 为了每次热更新包的大小是尽可能小的, 所以需要使用分包加载。3. 还有一个比较重要的点,由于公共包和业务包是分开加载的,需要加载完公共包再加载业务包,还要求速度要尽可能快,网上有些说一启动App就用初始化Bridge加载公共包,我认为这是一种很懒的处理方式,会很耗性能,我这里采用的是监听加载完公共包的通知,一旦收到加载完公共包的通知,就开始加载业务包。我这里使用的是基于Metro的分包方法,也是市面上主要使用的方法。原创 2023-04-02 21:56:03 · 2212 阅读 · 2 评论 -
Swift(学习):错误处理(自定义错误,do-catch捕捉错误,处理Error,try?,try1,rethrows,defer,assert,fatalError)
错误类型开发过程常见的错误:语法错误(编译报错) 逻辑错误 运行时错误(可能会导致闪退,一般也叫做异常 ......自定义错误Swift中可以通过Error协议自定义运行时的错误信息enum SomeError : Error { case illegalArg(String) case outOfBounds(Int, Int) case outO...原创 2019-07-20 23:56:27 · 1481 阅读 · 0 评论 -
Swift学习(十九): 可选项本质(多重可选项本质)
可选项的本质可选项的本质是enum类型这是底层可选项的代码,可以看出本质是enumvar age: Int? = 10 等价于以下四种:var age0: Optional<Int> = Optional<Int>.some(10)var age1: Optional = .some(10)var age2 = Optional.some(10)...原创 2019-07-24 22:35:04 · 591 阅读 · 0 评论 -
Swift学习(十六):协议(protocol,static,class,mutating,init,init?,init!,继承,协议组合,as?,as!,Any,AnyObject,Self)
协议(Protocol)协议可以用来定义方法、属性、下标的声明,协议可以被枚举、结构体、类遵守(多个协议之间用逗号隔开)协议中定义方法时不能有默认参数值 默认情况下,协议中定义的内容必须全部都实现 也有办法可以办到只实现部分内容协议中的属性协议中定义属性时必须用var关键字 实现协议时的属性权限要不小于协议中定义的属性权限 协议定义get、set,用var存储属性或g...原创 2019-07-19 22:26:17 · 1001 阅读 · 0 评论 -
Swift学习(十五):可选链
可选链(Optopnal Chaining)可选项的返回值也是可选型如果可选项为nil,调用方法、下标、属性失败,结果为nil 如果可选项不为nil,调用方法、下标、属性成功,结果会被包装成可选项 如果结果本来就是可选项,不会进行再次包装可选项调用无返回值的方法的结果可以为nil,也可以为可选型空元组()?,比如person?.eat(),当person为nil,则结果...原创 2019-07-18 15:44:39 · 239 阅读 · 0 评论 -
Swift学习(十四):初始化(指定初始化器,便捷初始化器,初始化器的相互调用,初始化器的重写,属性观察器,可失败初始化器,反初始化器(deinit))
初始化器类、结构体、枚举都可以定义初始化器 类有2种初始化器:指定初始化器(designated initializer)、便捷初始化器(convenience initializer) 每个类至少有一个指定初始化器,指定初始化器是类的主要初始化器 默认初始化器总是类的指定初始化器 ,当你没写新的指定初始化器,会自带默认初始化器,一旦自己写了新的指定初始化器,默认初始化器就自动消失,...原创 2019-07-14 23:43:10 · 933 阅读 · 0 评论 -
Swift 学习(十三):多态(实现原理)
多态:父类指针指向子类对象多态的实现原理:OC: RuntimeC++: 虚表(虚函数表)Swift:类似于虚表多态代码:class Animal { func speak() { print("Animal speak") } func eat() { print("Animal eat") } f...原创 2019-07-13 19:10:27 · 868 阅读 · 0 评论 -
Swift学习(十二):继承(内存结构,override重写,多态,属性观察器,final)
继承(Inheritance)值类型(枚举、结构体)不支持继承,只有类支持继承 没有父类的类,称为:基类 Swift并没有像OC、Java那样的规定:任何类最终都要继承自某个基类 子类可以重写父类的下标、方法、属性,重写必须加上override关键字内存结构Dog继承自Animal,也就拥有了age属性, Dog实际占用的内存空间是32个字节,其中指针类型8个字节...原创 2019-07-13 18:56:02 · 470 阅读 · 0 评论 -
Swift学习(十一):下标(结构体和类作为下标返回值的对比)
下标(subscript)使用subscript可以给任意类型(枚举、结构体、类)增加下标功能,有些地方也翻译为:下标脚本 subscript的语法类似于实例方法、计算属性,本质就是方法(函数),(语法书写方式[ ])p[0] = 11.1的赋值原理是调用了subscript的setter方法,反汇编代码如图:同理可得:print(p[0])的获取值的原理是调用了subsc...原创 2019-07-13 15:37:05 · 394 阅读 · 0 评论 -
Swift学习(七):结构体、类与枚举的异同(初始化器,值类型,引用类型)
结构体在 Swift 标准库中,绝大多数的公开类型都是结构体,而枚举和类只占很小一部分 比如Bool、Int、Double、String、Array、Dictionary等常见类型都是结构体在第6行调用的,可以传入所有成员值,用以初始化所有成员(存储属性,Stored Property)结构体的初始化器编译器会根据情况,可能会为结构体生成多个初始化器,宗旨是:保证所有成...原创 2019-06-28 19:12:58 · 651 阅读 · 0 评论 -
Swift学习(十):方法(实例方法,类型方法,mutating,@discardableResult)
方法(Method)枚举、结构体、类都可以定义实例方法、类型方法实例方法(Instance Method):通过实例对象调用,相当于OC中的对象方法 类型方法(Type Method):通过类型调用,用static或者class关键字定义,相当于OC中的类方法selfself在实例方法中代表实例对象 self在类型方法中代表类型 在类型方法static funcgetCo...原创 2019-07-13 13:33:53 · 354 阅读 · 0 评论 -
Swift学习(九):属性(存储属性,计算属性,延迟存储属性,属性观察器,inout,实例属性,类型属性,单例模式)
属性分类Swift中跟实例相关的属性可以分为2大类:存储属性(Stored Property)类似于成员变量这个概念 存储在实例的内存中 结构体、类可以定义存储属性 枚举不可以定义存储属性计算属性(Computed Property)本质就是方法(函数) 不占用实例的内存 枚举、结构体、类都可以定义计算属性由反汇编我们可以看出,只有radius这个存储...原创 2019-07-12 18:58:38 · 591 阅读 · 1 评论 -
Swift学习(五): 枚举(基本用法,关联值,原始值,递归枚举,MemoryLayout,可选项,强制解包,可选项绑定,空合并运算符??,隐式解包,多重可选项,guard)
枚举的基本用法 等价于 =>>使用:-------------------------------------------------------------------------------------------------------------------------------关联值(Associated Values)有时会将枚举的成员...原创 2019-06-24 20:04:59 · 928 阅读 · 0 评论 -
Swift学习(八):闭包(闭包表达式,尾随闭包,闭包的定义,自动闭包)
闭包表达式(Closure Expression)可以通过func定义一个函数,也可以通过闭包表达式定义一个函数func函数闭包定义函数闭包表达式调用可以直接省略参数名闭包定义函数也可以写为:闭包表达式的结构闭包表达式的简写尾随闭包如果将一个很长的闭包表达式作为函数的最后一个实参,使用尾随闭包可以增强函数的可读性尾随闭包是一个被书写在函数调用...原创 2019-07-02 17:28:52 · 1785 阅读 · 0 评论 -
Swift(学习):字面量
字面量(Literal)上面代码中的10、false、"Jack"就是字面量常见字面量的默认类型public typealiasIntegerLiteralType=Int public typealiasFloatLiteralType=Double publictypealiasBooleanLiteralType=Bool public typ...原创 2019-08-03 14:50:32 · 401 阅读 · 0 评论 -
Swift学习:泛型,关联类型,类型约束,协议类型及错误解决,some
泛型(Generics)泛型可以将类型参数化,提高代码复用率,减少代码量func swapValues<T>(_ a: inout T, _ b: inout T) { (a, b) = (b, a)}var i1 = 10var i2 = 20swapValues(&i1, &i2)print(i1, i2) // 20, 10 i1和i2...原创 2019-07-21 21:23:28 · 1451 阅读 · 0 评论 -
Swift(学习):模式匹配
模式(Pattern)什么是模式? 模式是用于匹配的规则,比如switch的case、捕捉错误的catch、if\guard\while\for语句的条件等 Swift中的模式有通配符模式(Wildcard Pattern) 标识符模式(Identifier Pattern) 值绑定模式(Value-Binding Pattern) 元组模式(Tuple Pattern)...原创 2019-08-03 22:16:39 · 421 阅读 · 0 评论 -
Swift学习:项目实战要点(常用三方库及使用,Unit Test单元测试)
常用的Swift第三方库网络请求:https://github.com/Alamofire/Alamofire 图片下载:https://github.com/onevcat/Kingfisher JSON访问:https://github.com/SwiftyJSON/SwiftyJSON JSON-Model转换:https://github.com/kakaopensourc...原创 2019-09-01 10:49:49 · 852 阅读 · 0 评论 -
Swift学习:标准库源码解析
Swift源码简介Swift于2015年正式开源,github地址:https://github.com/apple/swift 几个可能会经常看的目录docs:一些文档 stdlib:Swift源码 lib:C++源码 include:C++头文件标准库源码位置 https://github.com/apple/swift/tree/master/stdlib/public...原创 2019-08-31 19:07:22 · 1122 阅读 · 2 评论 -
Swift学习:响应式编程RxSwift
响应式编程响应式编程(Reactive Programming,简称RP)也是一种编程范式,于1997年提出,可以简化异步编程,提供更优雅的数据绑定 一般与函数式融合在一起,所以也会叫做:函数响应式编程(Functional Reactive Programming,简称FRP)比较著名的、成熟的响应式框架 ReactiveCocoa简称RAC,有Objective-C、Swift...原创 2019-08-26 23:25:26 · 646 阅读 · 0 评论 -
Swift(学习):函数式编程
Array的常见操作Array的map函数:var arr = [1, 2, 3, 4]//map映射, 你传入Int,它可以返回Int数组,也可以返回字符串数组var arr2 = arr.map { i in return 2 * I}var arr3 = arr.map{ $0 * 2 }var arr33 = arr.map{"abc_\($0)"}...原创 2019-08-17 18:28:26 · 569 阅读 · 0 评论 -
Swift(学习): 面向协议编程
面向协议编程面向协议编程(Protocol Oriented Programming,简称POP)是Swift的一种编程范式, Apple于2015年WWDC提出 在Swift的标准库中,能见到大量POP的影子同时,Swift也是一门面向对象的编程语言(Object Oriented Programming,简称OOP) 在Swift开发中,OOP和POP是相辅相成的,任何一方并...原创 2019-08-20 23:11:59 · 435 阅读 · 0 评论 -
Swift:从OC到Swift
只能被class(类)继承的协议只能被class(类)继承的协议有三种:继承自AnyObject 继承自class 被@objc修饰的类protocol Runnable1: AnyObject { }protocol Runnable2: class { }@objc protocol Runnable3 { }struct Animal: Runnable1 { } //...原创 2019-08-10 19:44:33 · 378 阅读 · 0 评论 -
Swift学习: String,Swift与OC的桥接
Swift的字符串类型String,跟OC的NSString,在API设计上还是有较大差异//空字符串var emptyStr1 = ""var emptyStr2 = String()var str1: String = "1"str1.append("_2") //"1_2"str1 = str1 + "_3" //"1_2_3"str1 += "_4" //"1_2_3...原创 2019-08-10 00:14:21 · 529 阅读 · 0 评论 -
Swift学习:内存管理,weak,unowned,autoreleasepool,循环引用,escaping,指针
内存管理跟OC一样,Swift也是采取基于引用计数的ARC内存管理方案(针对堆空间)class Person { deinit { print("Person.deinit") }}print(1)var p: Person? = Person()print(2)p = nilprint(3)//输出结果为://1//2//Perso...原创 2019-07-28 19:38:14 · 1151 阅读 · 0 评论 -
Swift(学习):访问控制
访问控制(Access Control)在访问权限控制这块,Swift提供了5个不同的访问级别(以下是从高到低排列, 实体指被访问级别修饰的内容)open:允许在定义实体的模块(工程中所有创建的swift文件)、其他模块(三方库)中访问,允许其他模块进行继承、重写(open只能用在类、类成员上) public:允许在定义实体的模块、其他模块中访问,不允许其他模块进行继承、重写 inter...原创 2019-07-28 16:20:04 · 379 阅读 · 0 评论 -
Swift(学习):扩展(Extension,计算属性,下标,方法,嵌套类型,协议,初始化,泛型)
扩展(Extension)Swift中的扩展,有点类似于OC中的分类(Category) 扩展可以为枚举、结构体、类、协议添加新功能 可以添加方法、计算属性、下标、(便捷)初始化器、嵌套类型、协议等等 扩展不能办到的事情:要注意扩展不能改变原有类的内存结构不能覆盖原有的功能 不能添加存储属性,不能向已有的属性添加属性观察器 (添加存储属性会改变原有类的内存结构) 不能添加父类 ...原创 2019-07-27 16:22:28 · 811 阅读 · 0 评论 -
Swift学习(二十):高级运算符(溢出运算符,运算符重载,Equatable,Comparable,自定义运算符)
溢出运算符Swift的算数运算符出现溢出时会抛出运行时错误 Swift有溢出运算符(&+、&-、&*),用来支持溢出运算var umin = UInt8.min //0var umax = UInt8.max //255var min = Int8.min //-128var max = Int8.max //127print(umax &+...原创 2019-07-27 13:58:17 · 767 阅读 · 0 评论 -
Swift(学习):从OC到Swift
MARK、TODO、FIXME// MARK:类似于OC中的#pragma mark // MARK: -类似于OC中的#pragma mark - //TODO:用于标记未完成的任务 // FIXME:用于标记待修复的问题 #warning: 用于标记未完成的任务或需要提醒的任务 左边在代码中写的标记,当你点击上方的结构栏会相应展示成右边那样左边在代码中写的...原创 2019-08-03 23:42:46 · 467 阅读 · 0 评论 -
Swift学习(六):针对内存的研究--汇编
枚举的内存本质代码举例: enum TestEnum { case test1(Int, Int, Int) case test2(Int, Int) case test3(Int) case test4(Bool) case test5 }1个字节存储成员值 N个字节存储关联值(N取占用内...原创 2019-06-26 17:48:52 · 285 阅读 · 0 评论 -
Swift学习(四):函数(定义,隐式返回,多返回值,参数标签,默认参数值,可变参数,inout输入输出参数,函数重载,内联函数,嵌套函数,typeslias)
函数的定义func: 声明这是一个函数sum:函数名(v1: Int, v2: Int): v1,v2是参数名, Int是参数类型-> Int:返回值为Intsum(v1: 10, v2: 20):调用函数,调用函数时有参数名(v1, v2)必须带着形参默认是let,也只能是let无返回值的函数->()表示返回值为空,()实际上是一个空元组...原创 2019-06-22 18:02:35 · 837 阅读 · 0 评论 -
在做短视频直播的时候添加UICollectionView出现空白解决方案
在跳转到直播界面时,,UICollectionView距离屏幕顶部留白20像素左右,好像正好是状态栏的高度,如图:这个问题是iOS11前后都有的,但是iOS11后处理方式不同了,加上下面的代码即可:if (@available(iOS 11.0, *)) { self.collectionView.contentInsetAdjustmentBehavior = U...原创 2019-05-04 14:30:40 · 479 阅读 · 0 评论 -
短视频报错:libc++abi.dylib`__cxa_throw:
工程中使用[AVAudioPlayer play]会产生__cxa_throw异常我调用AVAudioPlayer play方法,会莫名的产生__cxa_throw异常, 只是简单的调用系统的api,所以感觉很怪异,自己折腾了半天,后来在网上找到解决方法,在此记录下,还在找报错原因,希望知道的朋友能分享下。由于xcode中设置了当所有异常出现时的断点。于是会出现这样的异常。...原创 2019-05-02 14:12:16 · 376 阅读 · 0 评论 -
Xcode工程出现Block implicitly retains 'self'; explicitly mention 'self' to indicate this...警告
在做短视频和直播数据请求时出现:Block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior Insert 'self->'解决方法:Building Settings ->搜索implicit retain of 'self'将对应...原创 2019-05-02 13:03:56 · 4885 阅读 · 0 评论 -
多线程(三):NSOperation,NSOperationQueue,队列的最大并发数,队列的取消暂停和恢复,NSOperation操作依赖和监听,NSOperation线程间通信
NSOperationNSOperation的作用 配合使用NSOperation和NSOperationQueue也能实现多线程编程NSOperation和NSOperationQueue实现多线程的具体步骤 1)先将需要执行的操作封装到一个NSOperation对象中 2)然后将NSOperation对象添加到NSOperationQueu...原创 2019-05-02 00:44:02 · 1103 阅读 · 0 评论 -
多线程(二):GCD的基本使用,同步函数和异步函数,串行队列和并发队列,GCD队列组,栅栏函数,GCD单例
什么是GCD 1)全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 2)纯C语言,提供了非常多强大的函数GCD的优势 1)GCD是苹果为多核的并行运算提出的解决方案。 2)GCD会自动利用更多的CPU内核(比如双核,四核)。 3)GCD会自动管理线程的生命周期(创建线程,调度任务)。任务和队列 1)任务:执...原创 2019-05-02 00:30:34 · 785 阅读 · 0 评论 -
多线程(一): 进程和线程,多线程的四种实现方案,PThread和NSThread的基本使用,互斥锁解决多线程安全隐患,主线程和子线程间线程通信,线程的原子性和非原子性
进程什么是进程 1)进程是指在系统中正在运行的一个应用程序 2) 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内比如同时打开迅雷、Xcode,系统就会分别启动2个进程注:通过“活动监视器”可以查看Mac系统中所开启的进程线程什么是线程 1)1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 2)一个进程(程序...原创 2019-05-01 23:51:03 · 341 阅读 · 0 评论 -
IOS的捕获异常机制,屏蔽警告以及Cocoapods的详细使用和常见错误
如何屏蔽警告#pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" //-Warc-performSelector-leaks为唯一的警告标识 [self performSelector:selector...原创 2019-05-01 23:13:10 · 416 阅读 · 0 评论 -
AFNetworking的GET请求,POST请求,文件上传下载,网络监听
AFNetworking什么是AFN全称是AFNetworking,是对NSURLSession的一层封装 运行效率没有ASI高,但是使用比ASI简单 在iOS开发中,使用比较广泛 AFN版本变迁#import "ViewController.h"#import "AFNetworking.h"@interface ViewController ()@end@im...原创 2019-05-01 23:06:59 · 1717 阅读 · 0 评论 -
iOS的Runtime剖析
runtime结合block实现国际化GIT地址:https://github.com/AlanZhangQ/runtime-block-Nationality.git一. runtime简介runtime简称运行时,OC就是运行时机制,也就是运行时候的一些机制,其中最主要的就是消息机制 编译时和运行时的区别:编译时就是正在编译的时候,其实编译时就是简单的作一些翻译工作,就是编译器帮...原创 2019-04-01 22:54:15 · 206 阅读 · 0 评论