commentforblog's People
commentforblog's Issues
Swift协议 | 芝士就是力量
https://xq-120.github.io/2017/09/12/Swift%E5%8D%8F%E8%AE%AE/
协议可选实现Swift里标记某个方法为可选实现时,需要在协议前添加@objc,并且在可选方法前添加@objc optional.其实也是为了跟OC兼容.eg: 123456789@objc protocol Iterator { func first() -> AnyObject? func next() -> AnyObject? @obj
苹果官方文档查询 | 要为真理而斗争
Documentation Archive :搜xx编程指南,缺点就是苹果已经不再更新了。eg:CFNetwork Programming Guide、Stream Programming Guide。 documentation-Technologies :苹果目前维护更新的官方文档地址,可以用来搜API说明。缺点:都是一些API的介绍说明,原理性、系统性的东西很少。
OC类与元类 | 芝士就是力量
https://xq-120.github.io/2023/05/07/OC%E7%B1%BB%E4%B8%8E%E5%85%83%E7%B1%BB/
实例对象、类与元类实例对象的类称为类(类对象),类(类对象)的类称为元类(元类对象)。他们都是对象。 OC中对象、类和元类的关系如下图: 总结下: 实例对象的类是类对象,类对象的类是元类对象.元类对象的类是根元类,根元类对象的类就是自己本身.这里形成了一个闭环. 类对象里面保存的是实例方法. 元类对象里面保存的是类方法. 根类对象的superClass是nil,根类对象的类是根元类对象,
TAS、CAS简介 | 要为真理而斗争
https://xq-120.github.io/2021/08/01/TAS%E3%80%81CAS%E7%AE%80%E4%BB%8B/
原子操作是指操作是不可分割的,要么发生,要么不发生。事物只会处于原始状态和成功状态两种中的一种,不会处于一种完成一半的状态。 TAS和CAS指令是原子操作,但我感觉原子操作不仅是原子操作而且还是排他的,一个线程正在执行某个原子操作时,其他线程不能同时再执行该原子操作。 C语言里的volatile作用: 保证可见性 表示用到这个变量时必须每次都重新从内存里读取这个变量的值,而不是使用保存在寄存器里
NSCopying协议 | 要为真理而斗争
https://xq-120.github.io/2022/10/11/NSCopying%E5%8D%8F%E8%AE%AE%E7%9A%84%E5%AE%9E%E7%8E%B0/
NSCopying协议: 1234567891011@protocol NSCopying- (id)copyWithZone:(nullable NSZone *)zone;@EnD@protocol NSMutableCopying- (id)mutableCopyWithZone:(nullable NSZone *)zone;@EnD 分为不可变和可变两种拷贝。 实现: 具体怎么实现直接参
嵌套页面手势冲突解决 | 芝士就是力量
BUG场景mainTableView嵌套listTableView.mainTableView的headerView里有左右滑动的collectionView(eg:轮播图).此时mainTableView的下拉刷新就会和collectionView的左右滑动起冲突.collectionView左右滑时,mainTableView可能会跟着一起动. 为了实现吸顶效果,mainTableView是允
RSA算法原理介绍 | 芝士就是力量
https://xq-120.github.io/2020/08/24/RSA%E7%AE%97%E6%B3%95%E5%8E%9F%E7%90%86%E4%BB%8B%E7%BB%8D/
前置知识质数 质数又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。大于1的自然数若不是素数,则称之为合数(也称为合成数)。最小的质数为2。 互质关系 如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。比如,15和32没有公因子,所以它们是互质关系。这说明,不是质数也可以构成互质关系。
runloop使用 | 芝士就是力量
https://xq-120.github.io/2022/07/15/runloop%E4%BD%BF%E7%94%A8/
runloop启动前必须先添加输入源或定时器源,否则runloop一启动就会退出。总之runloop需要有监听的事件,否则就会退出。 启动runloopNSRunLoop提供了如下3种启动runloop的方法。当然NSRunLoop其实封装的是CFRunloop。 12345- (void)run NS_SWIFT_UNAVAILABLE_FROM_ASYNC("run cannot b
OC property、synthesize、dynamic关键字 | 芝士就是力量
OC的变量: OC有4种基本数据类型:char,int,float,double。它们又有一些限定词:signed,unsigned,short,long,long long。 实例变量+基本数据类型变量=成员变量。 实例变量指的是由类定义的变量。 @Property@property指令作用:声明了一个属性及属性的两个访问器方法。 如果在@implementation块里@synthesize
UITableView实践 | 要为真理而斗争
https://xq-120.github.io/2018/06/10/UITableView%E5%AE%9E%E8%B7%B5/
UITableView实践contentInset设置contentInset,会影响plain模式的组头位置.利用该特性取消plain模式组头吸顶效果. 12//设置contentInset,会影响plain模式的组头位置.self.tableView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0); 在设置界面,cell上的分割线显示是个头疼的问题.
OC中的访问控制 | 要为真理而斗争
https://xq-120.github.io/2023/03/08/OC%E4%B8%AD%E7%9A%84%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6/#more
OC中提供了4个访问控制符:@Private @Package @Protected @public。 @Private(当前类访问权限):成员只能在当前类内部可以访问,在类实现部分定义的成员变量相当于默认使用了这种访问权限。 @Package(同映像访问权限):成员可以在当前类或和当前类实现的同一映像中使用,同一映像就是编译后生成的同一框架或同一个执行文件,跨框架不可用。简单点讲就是使用pack
TCP协议报文 | 芝士就是力量
https://xq-120.github.io/2022/07/29/TCP%E5%8D%8F%E8%AE%AE%E6%8A%A5%E6%96%87/
TCP传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 TCP协议位于四层模型中的传输层 TCP报文 源端口:16bit,共65536个端口,端口0有特殊含义,不能使用,这样可用端口最多只有65535。 目的端口:16bit,接收方的端口号。 序号:32bit,可靠传输服务的关键字段。序号(sequence
NSURLSession简单介绍 | 芝士就是力量
https://xq-120.github.io/2021/08/29/NSURLSession%E7%AE%80%E5%8D%95%E4%BB%8B%E7%BB%8D/
NSURLSession的基础用法123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 - (void)viewDidLoad { [super viewDidLoad]; NSURLSessionConfiguration *config = [NSURLSe
博客收藏 | 要为真理而斗争
https://xq-120.github.io/2021/07/08/%E5%8D%9A%E5%AE%A2%E6%94%B6%E8%97%8F/
ming1016-study 网友个人收集的比较全的iOS开发技术点 Mayday-heji iOS面试相关的,有加群卖广告嫌疑 小专栏 质量较高,不过大部分都要收费。 个人博客Jamin Gua kingcos Edgar 安卓iOS一系列文章 yulingtianxia’s blog messageThrottle作者 酷酷的哀殿 llvm、汇编、编译、底层
Swift中的关键字 | 要为真理而斗争
https://xq-120.github.io/2023/02/26/Swift%E4%B8%AD%E7%9A%84%E5%85%B3%E9%94%AE%E5%AD%97/#more
@inline说明:函数内联,一种编译器优化技术。声明内联的函数,编译器会把该函数调用的地方用它的实现替换有点类似C语言的宏,这样就减少了函数的调用开销,属于一种微优化,如果函数实现简单,调用非常频繁可以使用内联进行优化。由于内联是把函数调用的地方用它的实现替换,因此内联可能会让程序的二进制包变大,取决于编译优化等级,编译器可能会自动对一些频繁调用的函数进行内联,如果这个函数实现比较复杂,那么此时
C语言整型类型长度与类型溢出 | 芝士就是力量
题外话C语言由Dennis M. Ritchie在1973年设计和实现。从那以后使用者逐渐增加。到1978年Ritchie和Bell实验室的另一位程序专家Kernighan合写了著名的《The C Programming Language》,将C语言推向全世界,许多国家都出了译本,国内有一些C语言书就是这本书的翻译或者编译。由这本书定义的C语言后来被人们称作K&R C。 随着C语言使用得越
IP协议报文 | 芝士就是力量
https://xq-120.github.io/2022/07/29/IP%E5%8D%8F%E8%AE%AE%E6%8A%A5%E6%96%87/
网络模型网络模型常见的有7,4,5层模型。 IP协议位于四层模型中的网络层。 IP报文 版本:IP协议的版本,占4bit,目前的IP协议版本号为4,下一代IP协议版本号为6。注意这里讨论的是IPv4的报文,IPv6的报文已经不长这个样了。 首部长度:IP报头的长度。固定部分的长度(20字节)和可变部分的长度之和。共占4位。最大为1111,即10进制的15,以32bits4字节为单位,代表IP报头
openssl使用 | 要为真理而斗争
https://xq-120.github.io/2022/12/17/openssl%E4%BD%BF%E7%94%A8/
1.创建私钥创建不带密码的私钥: 1openssl genrsa -out test_rsa_private.pem 1024 1024表示私钥的长度,长度越长安全性越高。如果对安全要求比较高可以指定私钥长度为2048。 查看私钥: 1cat my_test_private.key 打印: 123456789101112131415-----BEGIN RSA PRIVATE KEY-----MI
SDWebImage源码分析 | 要为真理而斗争
https://xq-120.github.io/2018/03/10/SDWebImage%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/
SDWebImage源码分析 本文主要分析解决以下几个疑问: 同一图片的请求,SD如何从缓存中查找出来(key的命名规则)?或者说查找过程是怎样的?OK SD工作过程以及是如何从服务器下载的? SD是如何缓存图片的?OK 当空间不足时,它的删除策略是什么(按时间顺序,还是图片质量)? SD图片缓存机制与系统的NSURLCache的区别,为什么SD说自己的性能要略高于系统的性能? SDWebI
IO模型简介 | 要为真理而斗争
https://xq-120.github.io/2022/07/25/IO%E6%A8%A1%E5%9E%8B%E7%AE%80%E4%BB%8B/
大致有下面五种IO模型: 阻塞IO模型,非阻塞IO模型,IO复用模型,信号驱动IO模型,异步IO模型。 阻塞IO模型读数据,发现没有数据,线程就一直等待直到有数据读取。 非阻塞IO模型读数据,发现没有数据,线程不等待直接返回读错误码。由于不知道什么时候会有数据所以这种非阻塞IO模型需要调用方不断检查是否有数据。 fd默认是阻塞IO访问,可以使用fcntl函数设置为非阻塞IO: 1status =
可变参数的函数 | 要为真理而斗争
https://xq-120.github.io/2022/10/03/%E5%8F%AF%E5%8F%98%E5%8F%82%E6%95%B0%E7%9A%84%E5%87%BD%E6%95%B0/
如何声明一个可变参数的函数在无法给出所有传递给函数的参数的类型和数目时,可以使用省略号(…)指定函数参数表。有如下几种形式: 123void fun1(int a, double b, ...); //给出确定的几个参数,其他用省略号void fun2(int a ...); //省略号前有或者没有逗号都是可以的void fun3(...);
类别覆盖原始实现引发的薛定谔的bug | 芝士就是力量
Bug出现机型:iPhone7Plus iOS15.1。 描述:在开发过程中发现弹出弹窗点击关闭之后界面就卡死了。多次尝试之后,最终发现只有在调试的时候出现,把线一拔不调试的时候一切又正常了。拿另一部iPhone6Plus iOS12.5.4的手机又都不会出现。顿时感觉遇到”薛定谔的bug”了。 分析项目中对UIAlertController做了一层简单的封装,是在自己的window上presen
iOS循环播放视频 | 芝士就是力量
https://xq-120.github.io/2022/05/29/iOS%E5%BE%AA%E7%8E%AF%E6%92%AD%E6%94%BE%E8%A7%86%E9%A2%91/#more
有一个需求需要循环播放一个视频,UI希望的效果是无缝循环播放。当时觉得应该问题不大,但事实却并非如此。如果只是单纯的循环播放,确实简单。但是想要无缝丝滑连贯的循环播放却并不那么简单。 方案一:ijkplayer项目中用的ijkplayer,刚开始是监听播放完成通知,播放完后重新播放,结果发现每次播完后都要停顿一下才会继续播放。达不到无缝循环的要求。 一顿搜索之后,发现可以通过设置option的lo
iOS设置圆角 | 要为真理而斗争
https://xq-120.github.io/2020/04/07/iOS%E8%AE%BE%E7%BD%AE%E5%9C%86%E8%A7%92/
iOS中设置圆角大致有下面几种办法,每一种都有各自的优缺点,结合场景选择合适的方案才是最佳处理。 1.cornerRadius12Setting the radius to a value greater than 0.0 causes the layer to begin drawing rounded corners on its background. By default, the cor
补码完全指南 | 要为真理而斗争
https://xq-120.github.io/2022/07/31/%E8%A1%A5%E7%A0%81%E5%AE%8C%E5%85%A8%E6%8C%87%E5%8D%97/
本文基于自己的理解,试图让猪都能理解补码的概念^_^。老规矩,先是几个概念。 机器数机器数是将符号数字化的数,最高位是符号位,正数符号位为0,负数符号位为1,其余位表示数值。 真值机器数所对应的实际数值。 编程语言类型无符号数全部二进制位均代表数值,没有符号位。 有符号数最高位代表符号位(“0”表示“+”,“1”表示“-”),其余位表示数值。
Swift中的AnyClass、AnyObject、Any | 要为真理而斗争
https://xq-120.github.io/2019/09/13/Swift%E4%B8%AD%E7%9A%84AnyClass%E3%80%81AnyObject%E3%80%81Any/
1.AnyObject 定义:public typealias AnyObject 说明:The protocol to which all classes implicitly conform. AnyObject can be used as the concrete type for an instance of any class, class type, or class-only pr
Swift中的枚举 | 要为真理而斗争
https://xq-120.github.io/2023/04/02/Swift%E4%B8%AD%E7%9A%84%E6%9E%9A%E4%B8%BE/
1.swift的枚举只能拥有原始值和关联值的其中一种,不能同时拥有,会报错。 2.读取关联值时不能写参数的类型,否则编译报错。 12345678910111213141516171819202122232425enum BinaryTree { case leaf indirect case node(v: Element, l: BinaryT
Swift对象拷贝 | 芝士就是力量
https://xq-120.github.io/2017/09/15/Swift%E5%AF%B9%E8%B1%A1%E6%8B%B7%E8%B4%9D/
Swift对象拷贝方法一:实现NSCopying协议123456789101112131415161718192021class Resume: NSObject, NSCopying { var name: String var sex: String? var age: String? var timeArea: String? var company:
OC对象内存布局 | 芝士就是力量
https://xq-120.github.io/2023/05/18/OC%E5%AF%B9%E8%B1%A1%E5%86%85%E5%AD%98%E5%B8%83%E5%B1%80/
OC对象的内存布局如下图 isa占用8个字节,是所有对象都拥有的。OC对象由系统规定最少占用16字节,一些对象可能实际只使用了8个字节。 isa结构体字段验证isa定义: 12345678910111213141516171819union isa_t { isa_t() { } isa_t(uintptr_t value) : bits(value)
layoutSubviews的调用时机 | 要为真理而斗争
https://xq-120.github.io/2017/08/20/layoutSubviews%E7%9A%84%E8%B0%83%E7%94%A8%E6%97%B6%E6%9C%BA/
layoutSubviews的调用时机方法说明: 该方法在iOS 5.1及更低版本上不执行任何操作。 否则,该方法将使用你设置的约束来确定子视图的大小和位置。 该方法由layoutIfNeeded自动调用,所以我们不能手动去调用它.在需要重新布局子视图时,可以调用[self layoutIfNeeded]或[self setNeedLayout]; 手动触发layoutSubviews调用[sel
OC block基本操作--Block的声明、赋值与调用 | 芝士就是力量
Block的声明、赋值与调用Block变量的声明和C语言的函数指针声明几乎一样,只是将”*”改为”^”.如下: 返回值类型 (^变量名称) (变量类型 变量1, 变量类型 变量2, ...) 例:int (^blkVar)(int a, int b); Block语法一个Block语法代表一个Block类型变量的值.它的写法和C语言函数的定义很像.仅有两点区别: 没有函数名. 在返回值前面加上”
制作CocoaPods公开库 | 要为真理而斗争
https://xq-120.github.io/2020/04/16/%E5%88%B6%E4%BD%9CCocoaPods%E5%85%AC%E5%BC%80%E5%BA%93/
- 创建要公开的pod库 主要包含pod源码和pod sepc文件、许可证等。 这个过程可以先在本地创建好,再到GitHub创建对应的仓库,然后将本地pod添加到远程仓库。 也可以先在GitHub创建好仓库,再clone到本地,然后在clone的目录下创建pod。 pod sepc文件的说明可以参考: CocoaPods 系列之三 Podspec 语法说明 cocoapods官网文档 Pods
iOS 事件分发与手势识别 | 要为真理而斗争
iOS 事件分发与手势识别在讲事件的分发之前,有三个概念不得不提:响应者对象, nextResponder, 响应者链. 响应者对象在iOS系统中,能够响应并处理事件的对象称之为responder object, UIResponder是所有responder对象的基类。UIApplication,UIViewController,UIView和所有继承自UIView的UIKit类(包括UIWin
iOS app文件系统介绍 | 要为真理而斗争
https://xq-120.github.io/2018/07/18/iOS%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F/
iOS app文件系统参考: 关于 iOS 删除缓存的那些事儿 官方文档 由于这方面的文档有很多了.这里只介绍一下/Library目录,该目录下有几个系统创建的子目录,用的比较多的是/Caches和/Preferences. The contents of the Library directory (with the exception of the Caches subdirectory) a
隐式类型转换导致的诡异bug | 芝士就是力量
看以下代码: 123456789101112NSUInteger a = 100;NSUInteger b = 104;NSUInteger c = 30;NSInteger ret = a - b;if (ret > c) { NSLog(@"1");}if (ret > (NSInteger)c) { NSLog(@&q
左移与右移 | 要为真理而斗争
https://xq-120.github.io/2022/10/17/%E5%B7%A6%E7%A7%BB%E4%B8%8E%E5%8F%B3%E7%A7%BB/
左移与右移: 1234567891011121314151617181920">>"右移操作规则:最低位丢弃。正数前面补零,负数前面补1。"<<"左移操作规则:最高位丢弃。无论正负数,后面补零。建议:左右移时参数最好限定为无符号数或正整数。有符号数需要注意的地方太多了。有符号数:根据内存分布,按上述规则移动。左移:由于有符号数最高位为
iOS stack overflow导致的EXC_BAD_ACCESS崩溃 | 芝士就是力量
最近想学习一下mmap的使用,没想到一来就掉坑里了。 测试代码如下: 12345678910111213141516171819202122232425262728293031323334- (void)test_mmap { __autoreleasing NSError *err = nil;// self.videoData = [NSData dataWithCont
OC内存管理之对象的引用计数 | 芝士就是力量
源码版本:objc4-781 我们都知道OC的内存管理是通过引用计数来管理的,对象刚创建时引用计数为1,retain后+1,release后-1,当引用计数减为0时就会被销毁。那么问题就来了,操作的这个引用计数值是保存在哪的?今天就来研究一下这个问题。 先说结论:早期OC对象的引用计数都是存储在引用计数表中的,但是后来Apple的工程师可能觉得每次都从表中查找修改效率有点低,于是做了一些优化,如果
iOS输入输出流 | 芝士就是力量
https://xq-120.github.io/2023/05/14/iOS%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E6%B5%81/
流式读写数据,所谓流式就是像小溪流一样细水长流避免峰值影响。它可以让你避免一次性将数据加载到内存,从而导致内存暴涨。比如播放一个本地视频文件,你不需要先将整个视频都加载到内存再播放,而是读取一段播放一段。 系统提供了两个子类NSInputStream和NSOutputStream用于流式处理。NSInputStream用于流式读取数据,NSOutputStream用于流式写入数据。 NSInpu
KVO的使用及实现原理 | 要为真理而斗争
KVO使用KVO,观察者与被观察者.被观察者添加某个观察者,观察自身某一属性的变化.当被观察者的属性值发生变化时,被观察者会直接将变化发送给观察者 (通过给观察者发送observeValueForKeyPath:消息),这也是和通知差别比较大的地方. 1.观察者需要实现observeValueForKeyPath:方法,并在该方法中做出相应行为.如果观察者没有实现observeValueForKe
清理APP缓存 | 要为真理而斗争
https://xq-120.github.io/2018/12/07/%E6%B8%85%E7%90%86APP%E7%BC%93%E5%AD%98/
清理缓存主要是删除/Caches目录下的内容.如果其他路径上的文件可以删除也可以包含进来. iOS 文件系统也得了解一下iOS 文件系统 12345678910111213141516171819202122232425262728293031323334353637383940414243+ (NSUInteger)getCachesSize { NSUInteger size
UITableViewCell重用导致的图片错乱问题 | 要为真理而斗争
tttttttttt之前做过一个视频信息列表展示的模块,cell很简单就是左边图片,右边文字信息。当时用的SDWebImage加载图片并没有看到图片错乱的情况。但是,如果是自己写的图片下载器,不注意处理是会导致图片错乱的。 今天写了个Demo,验证及解决这个问题。实验环境:cell依然是左边图片,右边文字信息。图片两张,一张大图片A(风景),一张小图片B(人物),采用自己实现的原始图片下载器异步下
iOS synchronized实现原理 | 要为真理而斗争
https://xq-120.github.io/2021/08/01/iOS%20synchronized%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86/
源码版本:objc4-781 @synchronized介绍@synchronized 所做的事情跟锁(lock)一样:它防止不同的线程同时执行同一段代码。但相比于使用 NSLock 创建锁对象、加锁和解锁来说,@synchronized 用着更方便,可读性更高。 @synchronized是对mutex递归锁的封装, @synchronized(obj)内部会根据传入的同步对象obj得到一把递归
OC class、superClass方法 | 芝士就是力量
https://xq-120.github.io/2023/05/06/OC-class%E3%80%81superClass%E6%96%B9%E6%B3%95/#more
测试代码: 12345678910111213- (void)test_class_superClass { Person *per = [[Person alloc] init]; Class cls = [per class]; //Person Class cls1 = [per superclass]; //Animal Class cls2 = Pers
OC atomic修饰符 | 要为真理而斗争
https://xq-120.github.io/2020/06/06/OC-atomic%E4%BF%AE%E9%A5%B0%E7%AC%A6/
源码版本:objc4-781,objc-accessors.mm文件中。 原子操作是指操作是不可分割的,要么发生,要么不发生。事物只会处于原始状态和成功状态两种中的一种,不会处于一种半完成状态。 OC 中的atomic修饰符源码实现: getter 方法: 123456789101112131415161718id objc_getProperty(id self, SEL _cmd, ptrdi
从JSONSerialization崩溃到搞懂Swift的try-catch | 要为真理而斗争
今天学习了下Swift中的try-catch,突然发现在json序列化时try-catch不好使了,下面的代码依然会导致崩溃,try-catch并不能catch住. 123456789101112131415161718192021222324import Foundationclass People: NSObject, Decodable { @objc var firstNa
C语言基本数据类型长度 | 芝士就是力量
题外话C语言由Dennis M. Ritchie在1973年设计和实现。从那以后使用者逐渐增加。到1978年Ritchie和Bell实验室的另一位程序专家Kernighan合写了著名的《The C Programming Language》,将C语言推向全世界,许多国家都出了译本,国内有一些C语言书就是这本书的翻译或者编译。由这本书定义的C语言后来被人们称作K&R C。 随着C语言使用得越
Swift中的Error | 芝士就是力量
https://xq-120.github.io/2023/04/02/Swift%E4%B8%AD%E7%9A%84Error/#more
OC中的错误是一个类NSError: 123456789// Immutable, and NSError must be Sendable because it conforms to Error in Swiftopen class NSError : NSObject, NSCopying, NSSecureCoding, @unchecked Sendable {
一种可行的边下边播方案for AVPlayer | 芝士就是力量
前言什么是边下边播? 个人理解边下边播指的是从服务器获取到的数据一边供给播放器播放一边缓存到本地,即使用一遍的流量完成播放和缓存。下次播放时有缓存的地方则播放缓存数据,没有缓存的地方则从服务器获取再播放。 0.边下边播方案目前的边下边播实现方案大致有两种:一种是使用本地代理服务器,一种是使用系统的AVAssetResourceLoaderDelegate。 使用本地代理服务器该方案是在播放器与视频
SDWebImage内存暴涨分析与解决 | 要为真理而斗争
使用SDWebImage加载图片,当列表有很多页,图片很多时,可能会导致内存暴涨: 产生内存暴涨的代码: 1234567891011121314151617181920212223242526//从磁盘获取图片,并缓存到内存.- (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key { UIIma
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.