首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

微信团队分享:iOS版微信的高性能通用key-value组件技术实践

考虑到这个防 crash 方案最主要的诉求还是实时写入,而 mmap 内存映射文件刚好满足这种需求,我们尝试通过它来实现一套 key-value 组件。...我们需要在性能和空间上做个折中: 1)以内存 pagesize 为单位申请空间,在空间用尽之前都是 append 模式; 2)当 append 到文件末尾,进行文件重整、key 排重,尝试序列化保存排重结果...可见 MMKV 性能远远优于 iOS 自带的 NSUserDefaults。...另外,在测试中发现,NSUserDefaults 在每2-3次测试,就会有1次比较耗时的操作,怀疑是触发了数据 synchronize 重整写入。...(进程活篇)》  《微信团队原创分享:Android版微信后台活实战分享(网络活篇)》  《Android版微信从300KB到30MB的技术演进(PPT讲稿) [附件下载]》  《微信团队原创分享

1.7K31
您找到你想要的搜索结果了吗?
是的
没有找到

iOS存储自定义类型到NSUserDefaults数据库

1.1 沙盒的根目录下有三个常用的文件夹: 1.2 Library文件夹 1.3 tmp文件夹 1.4 standardUserDefaults 的使用 2.1 把字典对象 持久化保存到文件中 2.2...当每页缓存容量在8192B到16384B之间,数据库拥有最好的读写性能。 如果单条数据小于100KB,则从SQLite数据库中读取数据速度更快;单条数据大于100KB,则从文件中读取速度更快。...Caches文件夹下的数据,需要应用程序负责删除,并且`iTunes同步不会保存该文件夹下的数据。...当应用程序不处于活跃状态,系统也可能会清除该目录下的文件。 iTunes同步,不会对tmp文件夹中的数据进行备份。...2.1 把字典对象 持久化保存到文件中 把字典对象 持久化保存到文件中

95410

UIScrollView 和 UIPageControl 实现启动滑动图

一、使用NSUserDefaults 判断滑动图有没有出现过,加载滑动图 NSUserDefaults 简介: NSUserDefaults可以将数据永久的保存在手机中,他是一个单例,用起来很方便...= (UIPageControl *)[self.view viewWithTag:201]; page.currentPage = current; //当显示到最后一页,...scrollViewDisappear]; } } 四、从屏幕上移除UIScrollView,并保存信息 这里只需要将UIScrollView和UIPageControl 从主屏幕上移除就可以了,别忘了将启动信息保存到...[scrollView removeFromSuperview]; [page removeFromSuperview]; }]; //将滑动图启动过的信息保存到...NSUserDefaults 中,使得第二次不运行滑动图 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults

54310

编码篇-持久化NSUserDefaults

前言 NSUserDefaults类,以字典形式保存数据,IOS会自动把字典中的键值对转换成对应的XML文件(也就是plist文件),这个文件会被保存到APP的沙盒目录中(路径为Library/Preferences...NSUserDefaults是单例,同时也是线程安全的 NSUserDefaults 的使用 简便方法存取不同类型数据 由上边的例子可以看到一个方法-setInteger:,这跟常用的-setObject...[[NSUserDefaults standardUserDefaults] setObject:obj forKey:key]; [[NSUserDefaults standardUserDefaults...简单举例来说明一下: 1.当第一次运行app初始化了@"color":@"blue" [[NSUserDefaults standardUserDefaults] registerDefaults:@...储存 Test *bc = [[Test alloc] init]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; NSData

1.1K10

从底层分析一下存在跨进程通信问题的 NSUserDefaults 还能用吗?

NSUserDefaults 是 iOS 开发者常用的持久化工具,通常用于存储少量的数据 示例: NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults...NSUserDefaults 内部在读写,会通过锁 lock 保证读写安全 可以通过 b os_unfair_lock_lock 设置断点 ?...image 经过测试,我们可以发现只有第一次初始化或者调用 set... forKey: 相关的方法,才会触发多进程通信 所以,我们可以得到以下结论: NSUserDefaults 写操作会触发 xpc...我们可以发现 xpc 框架存在两个不会锁住当前的线程 API xpc_connection_send_message xpc_connection_send_message_with_reply 所以,我们可以尝试通过以上两个...测试代码,需要根据需要修改 xpc_dictionary_set_string(hello, "CFPreferencesHostBundleIdentifier", "test.demo")

2.3K31

matlab保存所有图,Matlab中图片保存的5种方法

可以尝试 set (gcf,’Position’,[500,500,500,500], ‘color’,’w’) %大小设置。...格式的图片到当前路径 复制代码 另外有网友向我反映,有时我们只有一个Matlab图像的fig文件,但没有该图像的相关坐标数据,那我们如何获取fig图像的数据呢,这个其实比较好办 1、将那个fig文件保存到...import joblib #lr是一个LogisticRegressi … CSS中隐藏内容的3种方法及属性值 CSS中隐藏内容的3种方法及属性值 (2011-02-11 13:33:59) 在制作网页,...IOS开发中数据持久化的几种方法–NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul...ORACLE中SID和SERVICE_NAME的区别 背景:之前一直分不清plsql和程序中配置文件url之间的连接,想当然的认为service_name 和jdburl后面的实例相对应,直到出错的这一天

7.8K11

iOS学习——页面的传值方式iOS----KVC和KVO 详解

使用步骤: 需要传值将数据通过NSUserDefaults存到沙盒目录里面 - (void) btnClicked:(UIButton *)btn { /* setObject...:后面写的就是所需要传递的值 forKey:要具有唯一性、一致性; 唯一性是指:当代码中用到多个NSUserDefaults方法,要保证不同的key不一样,否则就是覆盖值...*/ [[NSUserDefaults standardUserDefaults] setObject:@"NSUserDefaults传值" forKey:@"NSUserDefaults"]...:YES]; } 需要使用值通过NSUserDefaults从沙盒目录里面取值进行处理 _label.text = [[NSUserDefaults standardUserDefaults] valueForKey...nonatomic, copy) NSString *content; //保存数据数据的属性 + (instancetype) shardDanLiObj; //单例对象获取方法 @end 需要传递数据使用单例类将数据保存到单例的属性中

1.7K20

MMKV--基于 mmap 的 iOS 高性能通用 key-value 组件

考虑到这个防 crash 方案最主要的诉求还是实时写入,而 mmap 内存映射文件刚好满足这种需求,我们尝试通过它来实现一套 key-value 组件。...考虑到主要使用场景是频繁地进行写入更新,我们需要有增量更新的能力:将增量 kv 对象序列化后,直接 append 到内存末尾;这样同一个 key 会有新旧若干份数据,最新的数据在最后;那么只需在程序启动第一次打开 mmkv ,...我们需要在性能和空间上做个折中:以内存 pagesize 为单位申请空间,在空间用尽之前都是 append 模式;当 append 到文件末尾,进行文件重整、key 排重,尝试序列化保存排重结果;排重后空间还是不够用的话...可见 MMKV 性能远远优于 iOS 自带的 NSUserDefaults。...另外,在测试中发现,NSUserDefaults 在每2-3次测试,就会有1次比较耗时的操作,怀疑是触发了数据 synchronize 重整写入。

8.1K211

iOS复习中有关SDWebImage可能知识点总结(1)

根据URLKey在硬盘缓存目录下尝试读取图片文件.这一步是在NSOperation进行的操作,所以回主线程进行结果回调notifyDelegate. 7....将图片保存到SDImageCache中内存缓存和硬盘缓存同时保存,写文件到硬盘也在以单独NSInvocationOperation完成,避免拖慢主线程 18....内存操作缓存) 先查看内存图片缓存,内存图片缓存没有,后生成操作,查看磁盘图片缓存 磁盘图片缓存有,就加载到内存缓存,没有就下载图片 在建立下载操作之前,判断下载操作是否存在 默认情况下,下载的图片数据会同时缓存到内存和磁盘中..."]; // [[NSUserDefaults standardUserDefaults] synchronize]; #warning 从沙盒中读取用户的配置项:在3G\...4G环境是否仍然下载原图 BOOL alwaysDownloadOriginalImage = [[NSUserDefaults standardUserDefaults] boolForKey

83520

获取iOS设备唯一标识的演进UDID, MAC Address,UUID,IDFA,IDFV,OpenUDID

三.OPEN UDID 第三方最出名的莫过于此了,但是iOS7这货也无法使用了,由于iOS7对剪贴板(OpenUDID保存到剪贴版中)的限制,导致同一个设备上应用间,无法再共享一个OpenUDID。...在我读取NSUUID,注意到获取到的这个值跟CFUUID完全一样(不过也可能不一样): 示例: 68753A44-4D6F-1226-9C60-0050E4C00067 1,利用 NSUserDefaults...因为NSUserDefaults 数据保存在 沙盒里面的,会随着软件删除而被清空。UUID不好的地方就是用户删除了你开发的程序以后,基本上你就不可能获取之前的数据了。...这个开关是一个简单的boolean标志,当将广告标示符发到任意的服务器端,你最好判断一下这个值,然后再做决定。...id)inObject forKey:(id)key;”里参数“forKey”的值应该是Security.framework 里头文件“SecItem.h”里定义好的key,用其他字符串做key程序会出错

4.8K50

融云技术分享:融云安卓端IM产品的网络链路活技术实践

当有新消息到达,消息服务首先会判断消息链路是否存活,如果消息链路处于存活状态,消息优先从消息链路下发到客户端,否则会被路由到推送服务器,由推送链路下发。...在链路不可用或者异常断开,能及时探测并启动重连等保障机制。 基于以上特性,消息链路除了前面所说的心跳机制外,还另外维护了两套链路优化机制:复合连接机制和重连机制。..., 则继续尝试连接下一个直到成功连接,将成功连接的地址保存到本地,作为最优地址,后面连接优先使用此地址。...2 )尝试重新连接服务器,以此类推当尝试重连 N 次后,仍然连不上服务器将不再尝试重新连接,只有在网络情况发生变化或重新打开应用时才会再次尝试重连。...在屏幕亮,关闭该 Activity 。

2.9K40

实现iOS图片等资源文件的热更新化(四): 一个最小化的补丁更新逻辑

基本思路 App启动,判断特定的服务器接口所返回的图片url是否为最新,判断方式就是比对返回值中的md5字段与本地保存的资源的url是否一致; 如果图片资源有更新,则下载解压到指定的缓存目录,初步打算以资源文件的...App启动,判断有无最新图片资源 此处主要涉及到的可能的技术点: 1. 如何用基础的网络类库发送网络请求?...可以使用 fileExistsAtPath,但其实使用 -pathForResource: ofType: 就够了,因为找不到资源问加你,它返回nil,所以我们直接调用它,然后判断返回是否为 nil ...会自动尝试从ipa中的bundle读取,bundle约定统一使用 main.bundle 来简化操作, 类目,对外暴露两个方法: #import @interface...imgName; /* smart update for patch */ + (void)yf_updatePatchFrom:(NSString *) pathInfoUrlStr; @end App启动,

1K50

这套设备管理方案助你效率10倍提升

然而在实操的过程中,却总是存在以下问题,导致设备管理效率提不上去,成本降不下来:一线巡检/维保人员:巡检都使用纸质表单,记录和存档非常麻烦,明明做完了工作却因为丢失表单而重复执行;口头故障上报存在遗漏出错...• 给设备一个“身份证”:一个设备一个二维码,扫码就可以进行巡检、维和故障上报;• 数据全部自动化收集与更新:数据通过腾讯云HiFlow由草料二维码连接到DataFocus中,数据有新增变动,实现自动化采集与更新...搜索:模板库搜索,找到「消防栓管理-DataFocus」模板保存:保存到我的账号查看:查看模板并生码根据模板添加设备的基本信息,如「编号」、「位置」、「负责人」等。...「有新表单数据提交」,依次进行相关配置。...灭火器巡检、灭火器故障维修、灭火器维、报警器巡检、报警器故障报修、报警器维的流程配置,实现全部数据的自动化收集。

4.1K30

iOS客户端启动速度优化实践

减少可执行文件体积:相比静态链接,动态链接在编译不需要打进去,所以可执行文件的体积要小很多。 如上图所示,不同进程之间共用系统dylib的_TEXT区,但是各自维护对应的_DATA区。...layoutSubViews()运行 绘制阶段 首页所有UIView的- (void)drawRect:(CGRect)rect运行 再加上启动之后必要服务的启动、必要数据的创建和读取,这些就是我们可以尝试优化的地方...main函数之后加载时间优化记录 NSUserDefaults是否是瓶颈 苹果官方文档提到NSUserDefaults加载的时候是整个plist配置文件全部load到内存中,目前头条主端当中NSUserDefaults...通过符号断点+[NSUserDefaults standardUserDefaults]确定最早一次的+load()从执行到结束耗时1.8ms,可见NSUserDefaults的初始化仅耗时1.8ms,...上面统计数据显示展示feed的导航控制器页面(NewsListViewController)比较耗时,对于viewDidLoad以及viewWillAppear方法中尽量去尝试少做,晚做,不做。

1.7K10
领券