- 博客(53)
- 收藏
- 关注
原创 iOS性能优化
文章目录思路总结官方文档tableview使用建议预处理与缓存技术选型按需加载性能监控欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章U...
2019-12-06 11:33:07 174
原创 masonry
*masonryedge:top、left、bottom、right;make、update、remake(删除设置过的约束,重新设置所有约束);center、sise;* 相对偏移offset:单边距相对偏移,+右移、下移,-左移、上移;with.offsetinsets:整体相对偏移;* equalTomake.left.equalTo(view.right).off...
2019-05-08 20:33:09 371
原创 AFNetworking:2.0常驻线程与3.0最大并发数问题
一 常驻线程:1、2.0 需要常驻线程的作用?2.0常驻线程,用来并发请求,和处理数据回调;避免多个网络请求的线程开销(不用开辟一个线程,就保活一条线程);2、而3.0不需要常驻线程?因为NSURLSession可以指定回调delegateQueue,NSURLConnection而不行;NSURLConnection的一大痛点就是:发起请求后,而需要一直处于等待回调的状态。而...
2019-05-08 11:26:07 5199
原创 framework动态库的动态加载
1 当前模拟器设备 app的Documents 路径(沙盒);NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) objectAtIndex:0];2 动态加载代码: //查找framwork路径 NSArray *pat...
2019-04-26 15:15:47 358
原创 c/c++/oc混编
一 文件类型:OC:.m/.h;C:.c/.h ;C++:.cpp/.hpp;二 混编:.m:oc与c混编;.m改成.mm: oc与c++、c混编;注意:不要在C++中依赖ARC,最好自己手动管理;三 在 OC 的 .mm 文件中调用 C 代码:需要将 C 代码 的.c修改为 .mm,或者建一个中间的OC类调用C代码即可;...
2019-04-26 11:07:20 330
原创 .framework动态库制作(静态库制作类似)
测试版本:xcode 10.2.1一 整体流程;1 新建ios的framework工程,新建类文件;2 运行前参数设置:*创建库类型设置(默认动态库):Build Dettings, Mach-O Type选择动态库;*头文件公开设置:新建类头文件可导入到系统自动生成的framework.h中(防止引用某个类时,missing module警告);*支持设备指令:Ar...
2019-04-25 22:45:46 319
原创 SDWebImage5.0.1版本缓存机制
一 内部流程顺序:0 站位图:图片下载是耗时操作,下载前可先显示站位图;1 内存:以url作为key,去内存中查找;2 磁盘:内存中没有,以url的MD5作为key,去磁盘中查找,找到则缓存在内存中;3 下载:*是否下载中:磁盘中也没有,如果此图片没有在下载中,则异步下载;如果在下载中,则继续下载;*下载完成后:分别把图片保存在内存和磁盘中;4 清除缓存:*收到内...
2019-04-25 12:25:24 633
原创 AFNetworking
功能:上传、下载、http网络请求(NSURLSession),网络监控(AFNetworkReachabilityManager),安全策略(证书与公钥),url序列化;版本差异:3.0 基于NSURLSession(无常驻线程,复用之前服务器和客户端网络链接,使用同一个Session中的task访问数据),删除了NSURLConnectionOperation(有常驻线程)。...
2019-04-24 11:18:25 128
原创 ios网络监控
网络监控参考:https://www.cnblogs.com/mafeng/p/7306450.html一 网络状态与场景:无网络:使用离线缓存;wifi:下载高清图片;3G/4G网络:下载缩略图;二 两种网络监控方案选择:官方Reachablity 库;AFN框架中的AFNetworkReachabilityManager;...
2019-04-23 20:42:52 194
原创 线程池
一 初衷:解决对象频繁创建和销毁的开销问题,提高处理器效率二 相关:线程池、队列、任务三 简述1 线程池:都在后台,有最大线程数;默认堆栈大小、默认优先级;繁忙时达到最大线程数且有任务挂起,则等待有线程执行完毕;未达到最大线程数且还有任务挂起,过一段时间线程不够时插入新线程;队列中无任务,可以挂起或者等待;2 队列:任务的容器;...
2019-04-23 20:31:23 93
原创 bug调试
bug:闪退(无堆栈信息),野指针;1、查看crash日志;2、查看用户操作路径统计;3、切好现在代码;4、想办法复现;5、断点单步调试;
2019-04-21 23:05:09 221
原创 ios原生app与h5交互库
WebViewJavascriptBridge:js与oc交互;RNCachingURLProtocol:离线缓存;
2019-04-21 21:54:36 178
原创 安全加密
1、对称加密aes:适用大量数据2、非对称加密rsa、sm2(国密):参数字段客户端公钥加密,服务端私钥解密;3、散列或者签名加密md5:不可逆,登录密码加密;4、其他安全措施:安全键盘:支付密码用,第三方云核与科南软件;代码混淆:属性名与方法变成无意义的字符串,简单代码混淆方式https://www.jianshu.com/p/a17640cb32b9;...
2019-04-21 17:20:38 367
原创 GCD:线程间通信
线程间通信?当使用dispath_async函数开辟线程执行任务的完成时,我们需要使用dispatch_async(dispatch_get_main_queue(), ^{});函数会到主线程内刷新UI。并完成通信。...
2019-04-21 16:43:54 138
原创 MVC 、 MVP 、MVVM
一、 MVP:基于MVC,把视图数据逻辑单独分离到p,pv之间通信用Protocol;二、MVVM:基于MVC,viewModal尽量把viewCtroller的业务逻辑分离出来;最好配合绑定机制;独立开发:viewModal可以封装业务逻辑处理、网络处理、数据缓存();低耦合:View 可以独立于 Model 变化和修改;重用:一个ViewModel 可以绑定到不同的 View ...
2019-04-21 16:37:52 163
原创 .a 与 .framework。
1、.a (纯二进制文件)+ .h + sourceFile(资源文件) = .framework。2、.framework可以是静态库,也可以是动态库。.a 只是动态库;
2019-04-21 16:23:33 204
原创 .framework动态库与静态库区别
动态库:编译时,只是引用,不会拷贝到目标程序,所以不影响目标程序的体积;运行时,才会加载,可以多个程序可以共享;但是动态库不存在或版本不正确,出现lib not found 错误;优点:热更新(不发布appstore的话);多个进程可以共享省内存,可扩展性强,所以方便多人开发扩展;可以将最终可执行文件体积缩小;缺点:执行慢,动态库不存在或者版本不正确,容易报错。...
2019-04-21 16:20:51 279
原创 RunLoop简单总结
1 modal:default、tracking(有外部事件滑动、锁屏、摇晃时);2 处理事件类型:NSTimer、observer、source(0、1);3 线程:4 两个观察者与自动释放池;5 应用:子线程开启常驻线程;...
2019-04-21 13:47:47 96
原创 KVO、KVC
一 kvc:键值编码使用场景;字典与模型的转换,访问私有变量;动态取值和赋值;实现kvo;底层实现:isa+环境参数(方法名找到)-实现接口->方法的具体实现;搜索顺序:以setvalue为例,setter方法->类方法返回yes,直接访问实例变量-》setvalue:forkey:,抛出异常,但这个方法可以重写;二 kvo:键值观察1 原理:通过isa-swizzli...
2019-04-21 10:54:18 208
原创 mac开启自带Apache服务器
打开终端//开启:需要输入电脑密码1. sudo apachectl start//重启2. sudo apachectl restart//关闭3. sudo apachectl stop测试:浏览器打开127.0.0.1或者http://localhost/;...
2019-04-21 09:41:49 170
原创 runtime
一、 实际应用:字典转模型、对象归解档;系统方法交换:如替换imageName;分类扩展属性;动态创建类:kvo实现;二、方法分类获取:class_copyPropertyList:属性列表class_copyIvarList:变量列表class_copyMethodList:实例方法列表类别扩展属性:objc_setAssociatedOb...
2019-04-20 11:38:15 98
原创 算法:选择排序、冒泡排序、快速排序,二分查找,台阶蓄水量统计
//选择排序:最值出现在起始端void selectSort(int *arr, int length) { for (int i = 0; i < length - 1; i++) { //趟数 for (int j = i + 1; j < length; j++) { //比较次数 if (arr[i] > arr[j]) ...
2019-04-17 22:54:12 213
原创 数据结构
参考:https://blog.csdn.net/yeyazhishang/article/details/82353846总结线性结构:栈(先进后出)、队列(先进先出);数组结构:遍历查询快,如散列表(key/value访问,如拉链法)链表结构:增删操作快;树结构:大量动态数据操作,如二叉树(数组与链表结合)、堆(完全二叉树的数组对象);*数组:存储结构连续优点:有索引,查询、...
2019-04-16 15:28:34 84
原创 线程与进程,http、https(post、get),socket(tcp、udp)的拆包和粘包,protocol buffer、大头小头简述
一、tcp和udp区别?三次握手安全:tcp建立连接(三次握手),安全可靠(有序,无差错、无丢失、无重复);建立连接:udp通信前不需建立连接,不可靠传输(视频、音频通话);分组开销:TCP面向字节流的传输,因此它能将信息分割成组,并在接收端将其重组;UDP是面向数据报的传输,没有分组开销。控制:TCP提供拥塞控制和流量控制机制;UDP不提供;总结:tcp安全、面向字节流传输有...
2019-04-16 14:55:52 543
原创 视频库:ffmpeg、live555、MobileVLCKit
1 ffmpeg:ffmpeg.exe 格式转换ffplay.exe 作播放器用,能播放各种格式的视频音频ffprobe.exe 查看音频或视频文件格式详细信息2 live555:ffmpeg对rtsp、rtp的支持相对于live555的支持较弱3 MobileVLCKit:全媒体播放器,流媒体: rtp | rtsp | hls/http 等等, Adobe的rt...
2019-04-16 11:13:54 869
原创 性能优化综合(含tableview)
一 监控与测试:网络监控:无网络、wifi、手机数据网络(联想高清缩略图、下载100个文件线程数控制);卡顿监控:观察主线程执行时间监控,不超过16ms(1s/60,人肉眼识别频率,也是系统屏幕刷新的频率);代码执行时间测试;代码执行内存测试;二 按需加载:快速滑动时,只对目标加载;停止滑动时,增加加载量;三 异步:异步(请求、数据、图片处理,主线程刷新ui)不堵塞主线程、...
2019-04-15 13:02:30 213
原创 GCD:apply(作用:同步执行多个并发任务)
//多个任务并发执行完后,再执行apply后面任务,优于循环 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //10:执行10次,index:执行编号 dispatch_apply(10, queue, ^(size_t index) {...
2019-04-15 10:31:49 136
原创 GCD:semaphore解决同步与异步最大并发数
#import "Semaphore.h"@implementation Semaphore//参考:https://www.jianshu.com/p/2dd2433e2d4a#pragma - 解决同步问题:任务1、2、3按顺序执行+ (void)syncTest{ dispatch_queue_t queue = dispatch_get_global_queue(DI...
2019-04-15 09:41:38 272
原创 GCD-group:notify、enter、leave、weat,after,barrier
1dispatch_group_enter:与leave成对出现,通知group,下个任务要放入group中执行;解决多个请求依次执行问题;dispatch_group_leave:通知group,任务完成要移除;dispatch_group_notify:全部任务完成,就会调用;enter+1,leave减1,为0时才会通知group任务完成;dispatch_group_wait:...
2019-04-15 09:34:58 309
原创 autoreleasepool
作用:使用局部autoreleasepool,及时对autoreleasepool作用域内,不需要的对象进行及时的释放,防止内存暴涨(含大量临时变量循环、新线程执行时、命令行工具)autoreleasepool官网文档https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/MemoryMgmt/A...
2019-04-14 20:49:37 166
原创 代码耗时统计:单例实现的dispatch_once与@synchronized方式对比
#import "ViewController.h"#import <mach/mach_time.h>static dispatch_once_t once;@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidL...
2019-04-14 17:21:33 202
原创 arc下获取对象引用计数
NSObject *obj = [[NSObject alloc]init]; NSObject *obj2 = obj; printf("retain count =%ld\n",CFGetRetainCount((__bridge CFTypeRef)(obj)));
2019-04-14 17:16:21 344
原创 weakSelf+strongSelf
block外:__weak __typeof(self)weakSelf = self;作用:对象释放时,自动对weak指针置nil,self不知道什么时候释放;block内:__strong __typeof(weakSelf) strongSelf = weakSelf;作用:保证self在block执行过程中,一直存在;...
2019-04-13 20:35:59 115
原创 Runtime-消息转发
原理:为方法添加响应者实际用途:1.JSPatch --iOS动态化更新方案:基于完整转发时,anInvocation有selector的所有参数;2.为 @dynamic 实现方法3.实现多重代理: NSPointerArray(弱引用集合)防止循环引用https://blog.csdn.net/kingjxust/article/details/49559091...
2019-04-13 17:19:24 124
原创 performSelector-afterDelay
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay; 说明:此方法里设置了1个定时器; 1 main queue调度:在队尾最后执行; 2 global queue异步调度: r...
2019-04-05 17:29:02 689
原创 GCD1-同步、异步,串行、并行
总结:1 同步与异步:同步、异步是针对线程而言;同步要先执行block再返回,异步则先返回而不用等待执行block;2串行并行 : 串行、并行是针对队列(任务);串行队列是时间上顺序执行,并行队列的任务是并发执行;//- (void)viewDidLoad中测试//全局变量:_mainQueue = dispatch_get_main_queue();_globalQu...
2019-04-05 16:52:05 254
原创 performSelector-onThread-waitUntilDone
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait; 1、waitUntilDone:YES,当前线程马上执行; 2、waitUntilDone:NO; main q...
2019-04-05 16:49:32 677
原创 RunLoop简介
1 什么是RunLoop?一个RunLoop就是一个事件处理的循环(do-while循环),用来不停的调度工作以及处理输入事件(比 如Source,Timer,Observer)。使用run loop的目的是让你的线程有事做事,无事休眠。2 run loop与线程?主线程的run loop默认是启动的,对其它线程来说run loop默认是没有启动的;在任何一个Cocoa程序的...
2019-04-04 13:11:25 120
原创 RunLoop-NSTimer异步创建
run loop与NSTimer,如何让NSTimer精准且不引起内存泄露?异步创建NSTimer,创建并开启runloop,不需要NSTimer时则invalidate。例1:异步定时器@interface NextViewController (){ NSTimer *_timer; NSInteger _timerNumber;}@end//开启定...
2019-04-04 13:01:43 250
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人