iOS数据储存之文件储存

iOS存储(文件存储,sqlite数据库操作) iOS中基本的文件存储代码,偏好设置,sqlite数据库操作,封装好的操作类,使用简单,代码打开即可运行 立即下载

前言

开发APP,很多时候都会遇到数据储存,本文通过文件储存的方式实现了数据储存。

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:812157648,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

思路

为了方便使用,简单封装了一下,可以储存字典和数组,如果字典或者数组中需要装自定义模型,需要模型实现归档解档。

1.基本方法
/**
 储存数组

 @param array 数组
 @param key 关键词
 */
+ (void)setArray:(NSArray *)array forKey:(NSString *)key;

/**
 读取数组

 @param key 关键词
 @return 数组
 */
+ (NSArray *)arrayForKey:(NSString *)key;

/**
 储存字典

 @param dic 字典
 @param key 关键词
 */
+ (void)setDic:(NSDictionary *)dic forKey:(NSString *)key;

/**
 读取字典

 @param key 关键词
 @return 字典
 */
+ (NSDictionary *)objectForkey:(NSString *)key;

/**
 根据关键词删除

 @param key 关键词
 @return 是否删除成功
 */
+ (BOOL)removeForKey:(NSString *)key;

/**
 删除所有

 @return 删除是否成功
 */
+ (BOOL)removeAll;

2.数据加密解密

数据加密是自定义的,可以自己按照自己的规则修改。

/**
 加密

 @param data 数据
 @param key 关键词
 @return 加密后数据
 */
+ (NSData *)encryptionWithData:(NSData *)data key:(NSString *)key{
    //压缩数据
    NSData *baseData = [[self gzippedDataWithCompressionLevel:0.1f data:data] base64EncodedDataWithOptions:0];
    return baseData;
}

/**
 解密

 @param data 数据
 @param key 关键词
 @return 解密后数据
 */
+ (NSData *)decryptWithData:(NSData *)data key:(NSString *)key{
    return [self gunzippedData:data];
}

/**
 32位 小写
 */
+(NSString *)MD5ForLower32Bate:(NSString *)str{

    //要进行UTF8的转码
    const char* input = [str UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(input, (CC_LONG)strlen(input), result);

    NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [digest appendFormat:@"%02x", result[i]];
    }

    return digest;
}

/**
 32位 大写
 */
+(NSString *)MD5ForUpper32Bate:(NSString *)str{

    //要进行UTF8的转码
    const char* input = [str UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(input, (CC_LONG)strlen(input), result);

    NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [digest appendFormat:@"%02X", result[i]];
    }

    return digest;
}

/**
 16位 大写
 */
+(NSString *)MD5ForUpper16Bate:(NSString *)str{

    NSString *md5Str = [self MD5ForUpper32Bate:str];

    NSString  *string;
    for (int i=0; i<24; i++) {
        string=[md5Str substringWithRange:NSMakeRange(8, 16)];
    }
    return string;
}

/**
 16位 小写
 */
+(NSString *)MD5ForLower16Bate:(NSString *)str{

    NSString *md5Str = [self MD5ForLower32Bate:str];

    NSString  *string;
    for (int i=0; i<24; i++) {
        string=[md5Str substringWithRange:NSMakeRange(8, 16)];
    }
    return string;
}

数据压缩

采用Gzip压缩数据。

//MARK:JmoVxia---按等级压缩(0-1)
+ (nullable NSData *)gzippedDataWithCompressionLevel:(float)level data:(NSData *)data{
    if (data.length == 0 || [self isGzippedData:data])
    {
        return data;
    }

    z_stream stream;
    stream.zalloc = Z_NULL;
    stream.zfree = Z_NULL;
    stream.opaque = Z_NULL;
    stream.avail_in = (uint)data.length;
    stream.next_in = (Bytef *)(void *)data.bytes;
    stream.total_out = 0;
    stream.avail_out = 0;

    static const NSUInteger ChunkSize = 16384;

    NSMutableData *output = nil;
    int compression = (level < 0.0f)? Z_DEFAULT_COMPRESSION: (int)(roundf(level * 9));
    if (deflateInit2(&stream, compression, Z_DEFLATED, 31, 8, Z_DEFAULT_STRATEGY) == Z_OK)
    {
        output = [NSMutableData dataWithLength:ChunkSize];
        while (stream.avail_out == 0)
        {
            if (stream.total_out >= output.length)
            {
                output.length += ChunkSize;
            }
            stream.next_out = (uint8_t *)output.mutableBytes + stream.total_out;
            stream.avail_out = (uInt)(output.length - stream.total_out);
            deflate(&stream, Z_FINISH);
        }
        deflateEnd(&stream);
        output.length = stream.total_out;
    }

    return output;
}

+ (nullable NSData *)gzippedData:(NSData *)data {
    return [self gzippedDataWithCompressionLevel:-1.0f data:data];

}
//MARK:JmoVxia---解压,默认
+ (nullable NSData *)gunzippedData:(NSData *)data {
    if (data.length == 0 || ![self isGzippedData:data])
    {
        return data;
    }

    z_stream stream;
    stream.zalloc = Z_NULL;
    stream.zfree = Z_NULL;
    stream.avail_in = (uint)data.length;
    stream.next_in = (Bytef *)data.bytes;
    stream.total_out = 0;
    stream.avail_out = 0;

    NSMutableData *output = nil;
    if (inflateInit2(&stream, 47) == Z_OK)
    {
        int status = Z_OK;
        output = [NSMutableData dataWithCapacity:data.length * 2];
        while (status == Z_OK)
        {
            if (stream.total_out >= output.length)
            {
                output.length += data.length / 2;
            }
            stream.next_out = (uint8_t *)output.mutableBytes + stream.total_out;
            stream.avail_out = (uInt)(output.length - stream.total_out);
            status = inflate (&stream, Z_SYNC_FLUSH);
        }
        if (inflateEnd(&stream) == Z_OK)
        {
            if (status == Z_STREAM_END)
            {
                output.length = stream.total_out;
            }
        }
    }

    return output;
}
//MARK:JmoVxia---是否是Gzip压缩数据
+ (BOOL)isGzippedData:(NSData *)data {
    const UInt8 *bytes = (const UInt8 *)data.bytes;
    return (data.length >= 2 && bytes[0] == 0x1f && bytes[1] == 0x8b);
}

其他

简单的封装了一下,仅供大家参考,代码比较简单,完整项目地址------>CLLocalization

作者:季末微夏
链接:https://www.jianshu.com/p/a146df5a1a28

ANSYS Fluent 2023R2实战:用欧拉多相流模型搞定流化床模拟(附详细参数避坑) 本文详细解析了ANSYS Fluent 2023R2中欧拉多相流模型在流化床模拟中的应用,包括模型选择、材料属性设置、相间作用力配置及初始化技巧。特别针对高颗粒浓度工况提供参数优化方案,帮助工程师提升模拟精度与效率,适用于化工、能源等领域的流化床反应器设计。 阅读详情

相关推荐

组态王|通过日历控件选择时间段查询历史报警

哈喽,你好啊,我是雷工!这节记录下查询历史报警信息的功能实现。以下为实现笔记。

做有价值的事,积累有价值的笔记! 3763

base64加密解密

NSDataBase64Encoding基本用法

浮生若梦 为欢几何 2036

Dify+工作流,通过多模态实现发票自动识别

上个章节我们用Dify实现了基于本地知识库的聊天助手,本节我们通过工作流 ,可视化界面快速构建复杂的工作流和自动化流程。结合 OCR(光学字符识别)技术和工作流引擎,可以实现发票的自动识别、数据提取以及后续的审批流程。本文将详细介绍如何使用 Dify 和工作流来实现发票的自动识别与审批。

odin2005的博客 7425

iOS常用5种数据存储方式详解

1.plist文件存储  每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离。应用必须待在自己的沙盒里,其他应用不能访问该沙盒 应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Layer)   模拟器应用沙盒的根路径在: (apple是用户名, 6.0是模拟器版本) /Users/apple/Library/Applicat

陈凯昂的博客 1531

搜索引擎——ElasticSearch汇总

汇总——ElasticSearch篇 全文检索 问题1:什么是全文检索? 基本概念:对**非结构化数据/结构化数据**先建立**索引**,再对索引进行搜索**文档**的过程叫做全文检索。 什么是非结构化与结构化数据? - 非结构化数据:没有固定的格式的数据(html,word,excel)---没有固定长度,字段约束,描述,散列数据 - 结构化数据:有固定的格式的数据(如:数据库数据)---有固定长度(varchar(50)),字段类型,描述修饰数据 搜索算法:顺序扫描法、倒排索引法 - 顺序

alonewolf_99的博客 1839

模型压缩技术:剪枝、量化与知识蒸馏实战

模型压缩技术:剪枝、量化与知识蒸馏实战,在深度学习领域,模型的性能往往与模型的规模紧密相关,更大的模型通常能学习到更复杂的模式,从而在任务中取得更好的效果。然而,随着模型规模的不断增大,其在实际应用中面临着诸多挑战,如内存占用高、计算资源需求大、推理速度慢等问题,这使得在资源受限的设备(如移动设备、嵌入式设备)上部署变得困难重重。模型压缩技术应运而生,它旨在在尽可能保持模型性能的前提下,通过各种方法减少模型的参数数量和计算量,提高模型的效率和可部署性。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 5万+

base64加密

base64加密,目前遇到的加密方法. base64 意思是 2的6次方 base64加密后的数据会比原来的数据大,而且结尾一般会有两个等号(==)base64支持反向解密.而且base64是对二进制数据进行加密; 所以,要对数据进行base64加密,需要先将数据转为2进制数据.NSData * base64Data = [data base64EncodedDataWithOptions:0

庐山烟雨浙江潮 2784

qq对接openclaw,通过qq发送命令

把 OpenClaw 接入 QQ 和微信,目前主流的微信文章和教程主要提供了两种截然不同的路径。我为你梳理了它们的核心区别和关键步骤,你可以根据自己的需求来选择。

suny8的专栏 270

ios 文件存储

一,沙盒iOS 中的沙盒机制(SandBox)是一种安全体系。 每个 iOS 应用程序都有一个单独的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒。所有的非代码文件都要保存在此,例如属性文件 plist、文本文件、图像、图标、媒体资源等。 Application:存放程序源文件,上架前经过数字签名,上架后不可修改,由于应用程序必须经过签名,所以不能在运行时对这个目

书弋江山的博客 2521

人工智能_大模型095_Web版003_deepseek R1本地安装_私有化部署_支持RAG_调用HTTPAPI做自己的AI应用_安装RagFlow以及使用_---人工智能工作笔记0240

这里的一定要注意,是资源不够用了,可以点击ragflow-server左边的小绿点,查看 结果。注意去把内存改成10G把至少,我这里改成了10G,因为电脑一共就16G,再试试吧.可以看日志,就显示的是没有连接上mysql,结果我一看,mysql,根本没启动.然后下面选择general就可以了,然后点击确定,然后再去点击。手动去启动,然后再去试试,注意,内存这里给8G太小了还是.调成8G了,然后硬盘大了大了一些换成50G了,然后。点击系统模型设置可以看到,选择聊天模型就可以了,

添柴程序猿的专栏 447

Multisim14.0仿真(五十九)基于74LS161的24进制计数器应用设计

它具有同步预置、异步清零功能,支持并行数据加载,并可在计数使能控制下进行二进制计数。:低电平时,在下一个时钟上升沿加载输入数据(A, B, C, D)。(多个 74LS161D 串联构成 8 位、12 位等更长计数器)。低电平时,下一个时钟上升沿加载输入数据(A, B, C, D)。:低电平有效,立即清零计数器(不受时钟控制)。均为高电平时,每个时钟上升沿计数。:两者均为高电平时,计数器才能递增。:立即清零计数器(不受时钟控制)。(通过预置初始值控制计数范围)。(计数范围:0 ~ 15,即。

corlin6688的博客 4761

iOS 文件和数据管理 (可能会删除本地文件储存)

转自:http://www.apple.com.cn/developer/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/FilesandNetworking/FilesandNetworking.html 文件和数据管理 iPhone OS系统上的文件和用户的媒体数据及个人文件共享闪存上的空间。出...

weixin_30432579的博客 234

10|Git Diff 与增量代码识别:本次到底改了哪些代码?

本文介绍 Git Diff 和增量代码识别,帮助你理解精准测试如何先找到本次真正变化的代码。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 160

iOS 内存缓存和硬盘缓存

ios缓存的而两种方式 1、内存缓存,内存缓存是指当前程序运行空间,内存缓存速度快容量小,它是供cpu直接读取, 比如我们打开一个程序,他是运行在内存中的,关闭程序后内存又会释放。 2、磁盘缓存,磁盘也就是硬盘缓存,磁盘是程序的存储空间,磁盘缓存容量大速度慢,磁盘是永久存储东西的; 磁盘缓存是存在Library/Caches 讲数据存储之前先来了解一下iOS的沙盒机制 iOS文件创建读...

xu_yu_jie的博客 720

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ios 模拟器沙盒_ios开发中的沙盒机制

iOS应用储存分以下几种:一、沙盒基本机制二、plist储存三、偏好设置四、NSKeydeArchiver归档一、沙盒基本机制(sandbox)iOS系统相对于Android系统,或者相对于Windows系统来说比较安全的原因很多,其中有一点就是苹果推出的沙盒机制,每个应用都有自己对应的沙盒,每个应用程序之间不能相互访问非本程序的沙盒,所以,Apple相对于其他的系统来说比较安全,再是从内存上来说...

weixin_32827751的博客 557

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Mac如何手动清除硬盘中的其他

一 背景 使用Mac的人经常会发现一个问题, 当Mac使用一段时间过后会发现文档和安装的软件所占用的系统空间都比较少。而其他占据了大量的储存空间。更使人头痛的是即使你安装了第三方的垃圾清除软件但是收效甚微。而且Mac上的优秀清理工具价格也不是很便宜。 在此背景下也会有人选择重新安装系统。但是重新安装系统数据又是一个新的问题。 二 其他文件详解 “其他”中包含了很多不能够被苹果识别的文件,比如说,你的Mac可以很轻易的识别出音乐、图片、电影文件来,但是例如使用AE、PS后的工程文件,则不会被Mac识别出

枫叶 2473

macpro如何清理磁盘空间_如何清理Mac OSX 里的“其它”储存空间

那么 OS X 中的“ 其他 ”储存究竟是什么?其他可能会占据很大的空间,那么 Mac 上的这个“ 其他”到底是什么呢?基本上它包含了所有 OS X 没有分配指定储存类型的各种应用程序、备份、音频、电影和照片。这就意味着有很大一部分目录会被放到“ 其他”里,其中会包括下面这些东西:• 各种文件类型, 包括 PDF, doc, PSD 等等• 文件和磁盘镜像, 包括 zips, dmg,...

weixin_39729837的博客 510

IOS 本地储存(数据持久化)

将数据储存到本地文件

qq_28656559的博客 340

安装更新xcode提示储存空间不足

1.如何查看并简单管理Mac的储存空间 这一步先简单的把没用的程序、文件和回收站清理一下。 2.清理占储存空间的“其他”的若干方法 ①清理真机调试的数据 如果你的mac用来做IOS开发,点开访达,点击前往,到地址~/Library/Developer/Xcode/iOSDeviceSupport。这个目录会随着真机调试越来越大,建议删除里面的数据。 清理不影响真机调试,下次接入真机时,xcode会自动创建新响应的文件夹。 ②清理xcode的构建数据 目录是~/Libr...

1100

计算机的手机储存在哪里,手机的内存和电脑的内存、储存有哪些不同?

小萌前几天说要帮家里人换个手机,在挑的时候突然问我了个问题“安卓手机说的4+64,8+128是啥?为啥我买苹果就考虑32G内存还是64G内存就好啦?”好吧,对于不关心数码的群体来说,也难怪分不清运存和储存,那今天的科普就来简单聊一下。手机运存和存储是什么?读书时上电脑基础课程学过,电脑有两个重要存储器,一个是硬盘,一个是内存,硬盘主要用于储存你在电脑中保存的一切数据和文件,而内存则是用来暂时存放C...

weixin_36419499的博客 1556

怎样在iPhone和Mac上取消订阅iCloud 储存空间?

iCloud空间好处就是可以随时随地的自动备份iPhone、iPad、iPod touch或Mac装置上的资料,但有的时候我们不想用iCloud想换别的,我们该怎样取消续订呢? 无法将iCloud储存空间降级到免费 如果你打算想要将回到免费5GB空间上,那就要先注意iCloud 上的占用空间是否低于5GB 以下,否则会导致iCloud降级无法按完成,并且要尽快透过其他方式备份,当空间降下来后,超过容量新照片和影片就不会自动上传到“iCloud照片图库”,文件不会再上传到iCloud Drive,而且您的iO

htt325523的博客 4140

iOS5可能会删除本地文件储存

文/Nick(iphoneincubator) 关于iOS 5的本地文件储存Marco(Instapaper 的开发者)写过一篇很好的帖子阐述过相关问题,有兴趣的同学可以先阅读下他的文章然后再看下文。 在苹果开发者的论坛上也有许多相关问题的讨论贴: 安全地保存文件? 如何在缓存文件夹内持久保存文件? 如果我想让文件永久保存且不会和iTunes同步,我该把文件保存在哪里? ...

125

ios android 系统占用空间,iOS 系统占用了 20G 储存空间?别担心,教你快速解决!...

如果你曾经查看过自己 iOS 设备的储存空间使用情况,那么你可能见到过下面这种情形:你可能发现了,系统所占据的空间太大了,远超过了正常的范围,这是怎么回事呢?下面就为大家解释一下出现这类情形的几种解决方法。数值显示异常这是出现 iOS 系统占用异常的大多数情况,没错,就只是单纯的显示异常。当我们点击「设置-通用- iPhone 储存空间」时,系统需要一定的全盘扫描时间,已使用的空间越大,所需要的扫...

weixin_40003451的博客 6569

如何清理iCloud储存空间,解决办法都在这!

随着iPhone、iPad和Mac的普及,iCloud已成为我们数字生活的核心存储空间。然而,5GB的免费空间对于大多数用户来说远远不够,当您看到"iCloud存储空间已满"的警告时,是否感到困扰?本文将为您提供全面的解决方案,教您如何清理iCloud储存空间。

2401_88252730的博客 1223
上一篇: 深入研究Block捕获外部变量和__block实现原理
下一篇: 自定义UITextView输入框
iOS发呆君
博客等级 码龄6年 8粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值