iOS项目拆分:数据本地持久化(2)

Unity数据持久化实战:从PlayerPrefs到Easy Save 3的完整解决方案 数据持久化是游戏开发中的基础技术,它涉及将游戏状态、玩家进度等信息存储到本地或云端,确保应用关闭后数据不丢失。其核心原理是通过序列化将对象转换为可存储格式(如JSON或二进制),再通过文件I/O进行读写。这项技术的价值在于为游戏提供稳定的状态管理、跨会话体验和防作弊基础。在Unity引擎中,开发者常面临PlayerPrefs功能局限、跨平台兼容和复杂对象序列化等挑战。Easy Save 3作为Unity Asset Store的热门插件,提供了完整的解决方案,支持从基本数据类型到自定义类、资源引用及加密存储 阅读详情

NSUserDefaults是一个单例,在整个程序中只有一个实例对象,它可以用于数据的永久保存,而且简单实用,适合存储轻量级的本地数据存储,比如保存登陆界面的用户名、密码之类的简单数据(注释:个人理解简单的用户名密码是可以依赖 NSUserDefaults存储,但是整套用户信息或是一些数据还是尽量存储成文件较为合理),或是某些计数统计之类较轻量级的数据,并使之本地持久化,除非APP卸载否则一直保存。

NSUserDefaults支持的数据类型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL。

// 初始化NSUserDefaults,[NSUserDefaults standardUserDefaults]是系统提供的单例方法。
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
// [[NSUserDefaults standardUserDefaults] setObject:forKey:]存储数据
[userDefaults setObject:array forKey:@"user"];
// 持久化数据,直接同步到文件里 [[NSUserDefaults standardUserDefaults] synchronize]
// NSUserDefaults是定时把缓存中的数据写入磁盘的,而不是即时写入,为了防止在写完NSUserDefaults后程序退出导致的数据丢失,可以在写入数据后使用synchronize强制立即将数据写入磁盘: 运行同步代码后,NSUserDefaults中的数据即被写入到.plist文件中,如果是在模拟器上运行程序,可以在Mac的/Users/YOUR-USERNAME/Library/Application Support/iPhone Simulator/4.1/Applications/YOUR-APP-DIR/Library/Prefereces目录下面找到一个文件名为YOUR-Bundle_Identifier.plist的plist文件,用Xcode打开该文件,可以看到刚才写入的数据。
[userDefaults synchronize];
// [[NSUserDefaults standardUserDefaults] objectForKey:@"user"]来获取已存数据,“这里的objectForKey需要对应合适的数据类型取值方法”
[userDefaults objectForKey:@"user"]
// 如果想删除某个数据项,可以使用removeObjectForKey删除数据
[userDefaults removeObjectForKey:@"user"];

这里列举两种数据类型的使用方法:
1、存储字符串(NSString)类型的数据代码如下:

   NSString *passWord = @"密码:1234567";
    [[NSUserDefaults standardUserDefaults] setObject:passWord forKey:@"userPassWord"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    //将数据取出也很简单,只需要取出key 对应的值就好了,代码如下:
    NSString *password = [[NSUserDefaults standardUserDefaults] objectForKey:@"userPassWord"];
    [self.clickBtn setTitleColor:[UIColor blackColor] forState:(UIControlStateNormal)];
    [self.clickBtn setTitle:password forState:(UIControlStateNormal)];

2、存储整数型数据代码如下:

    NSInteger clickCount = [[NSUserDefaults standardUserDefaults] integerForKey:@"ClickCount"];
    clickCount ++;
    [[NSUserDefaults standardUserDefaults] setInteger:clickCount forKey:@"ClickCount"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    NSInteger num = [[NSUserDefaults standardUserDefaults] integerForKey:@"ClickCount"];

其他数据类型的存储就不在这里一一列举了,要是你的项目用到其他数据类型可查看NSUserDefaults 的API 。

// 适用的数据类型
- (void)setObject:(nullable id)value forKey:(NSString *)defaultName;
- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
- (void)setFloat:(float)value forKey:(NSString *)defaultName;
- (void)setDouble:(double)value forKey:(NSString *)defaultName;
- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
- (void)setURL:(nullable NSURL *)url forKey:(NSString *)defaultName;

这是根据苹果官方文档上的相关信息和项目经验,做的一些总结,如果你发现不准确或有新的建议可以留言或评论。

35、iOS 开发:数据持久化与多线程编程入门 本文介绍了iOS开发中的数据持久化与多线程编程基础知识。数据持久化涵盖属性列表、对象归档、SQLite3和Core Data,并通过代码示例展示了Core Data的使用方法。多线程部分详细介绍了Grand Central Dispatch(GCD)的基本概念和应用场景,结合示例应用SlowWorker演示了如何利用GCD提高界面响应性。文章还讲解了块(Blocks)的语法和使用方法,并讨论了多线程编程中的线程安全、死锁和性能优化问题。通过本文,开发者可以掌握iOS中数据存储和并发编程的核心技术,提升应用的 阅读详情

相关推荐

用uni-app与Vuex构建轻量刷题App:从题库设计到本地持久化

移动端学习工具的开发中,跨平台框架与本地数据管理是核心痛点。uni-app作为基于Vue语法的跨端解决方案,能够兼顾Android、iOS与H5,有效降低多端维护成本。而Vuex作为统一状态管理库,为答题进度、用户答案等实时数据提供了清晰的数据流,配合本地存储实现错题与统计的持久化,使应用在无后端依赖下运行流畅。从题库JSON结构设计到判题函数封装,再到计时交卷逻辑,看似简单的刷题App背后涉及完整的前端工程实践。本文以“简单刷题App”为例,拆解移动端工具类应用的开发思路与避坑指南,为开发者提供可落地的跨

weixin_33871366的博客 463

iOS项目拆分:数据本地持久化(3)

归档是将对象转化为数据字节, 以文件的形式存储在磁盘上,是数据本地持久化方式中的一种。 归档数据需要用到Model的时候,创建一个继承与NSObject的类遵循NSCoding协议。#pragma mark - 单个对象存储 NSArray *array = [NSArray arrayWithObjects:@"X教授",@"金刚狼",@"暴风女", nil]; NSString

Jane's Blog 1348

极路由 极1s J1S hc5661 刷padavan固件

极路由1S刷机指南 准备工作: 下载Breed不死固件 通过WinSCP上传或直接wget获取 执行mtd命令写入Breed 关键步骤: 进入Breed控制台(按住Reset键开机) 备份原厂固件和密钥 下载Padavan固件(RT-N14U-GPIO-12-xiaodu-ji1S-128M.trx) 刷机过程: 在Breed控制台更新固件 等待自动重启完成 初始设置: 管理地址:192.168.123.1 默认账号:admin/admin 无线名称:PCDN 无线密码:1234567890 注意事项:切勿

SimonLiu的博客 1303

iOS项目拆分:数据本地持久化(1)

在这里本人将以往做过的项目一一做了总结,并且拆分成一个个细小的功能模块(这里不包括UI界面搭建),封装抽类成一个个独立的功能。会把涉及到的功能点和知识点做详细的注释,便于理解、学习、使用。重要数据本地存储重要数据这里所要说的是用户数据,包含用户相关信息,以便用户操作APP,前端和服务器的数据交互。 数据本地持久化(所谓的持久化,就是将数据保存到手机硬盘中,使得在应用程序或机器重启后可以继续访问之前保

Jane's Blog 1350

TI C2000 , .cmd文件,.TI.ramfunc,将程序分配为在RAM中运行/Flash运行的配置方法和原理讲解,(如28375S ,280049,28335等等芯片)

1 基础知识讲解 1.1 在RAM中运行还是在flash中运行指的是什么? 1.1.1 背景:程序编译完之后生成的.bin文件,.bin文件中包含代码段,代码段中全是汇编指令,而汇编指令中包含多个函数,各函数头的地址不同,如存在A函数和B函数,假设RAM地址区间是0x0000-0x8000,flash的地址区间是0xA000-0xF000,A函数要调用B函数,则A函数调用B函数的那段汇编指令中包含的是B函数头的存储地址,A函数和B函数都在flash中有存储 1.1.2 情况1:B函数是配置为在RAM中运行,

weixin_43776284的博客 8069

从零搭建Python接口自动化测试框架:pytest+requests+Allure实战指南

接口自动化测试是现代软件工程中保障交付质量、提升测试效率的核心实践。其基本原理是通过脚本模拟客户端请求,对服务端接口进行自动化的功能验证、性能探测与回归测试,从而替代重复的手工操作。在技术实现上,Python凭借其简洁语法和丰富的生态,成为构建此类框架的主流选择,其中pytest测试框架、requests HTTP库和Allure报告工具构成了技术栈的黄金组合。这套技术方案的价值在于,它能将测试用例数据(如YAML文件)与执行逻辑分离,实现数据驱动测试,并通过持续集成(如Jenkins)无缝融入DevOps

weixin_31822733的博客 378

iOS项目拆分:数据本地持久化(4)

Core Data是有苹果官方提供的框架(#import <CoreData/CoreData.h>),实现数据持久化存储。Core Data实际上是将数据库的创建、表的创建、对象和表的转换等操作封装起来,极大的简化了操作。使用Core Data进⾏数据库存取不需要手动创建数据库,创建数据库的过程完全由Core Data框架自动完成,使用者需要做的就是把模型创建起来。Core Date与SQLite

Jane's Blog 2909

智能车图像处理去畸变+逆透视教程

图像处理,去畸变与逆透视整合

wu58430的博客 1万+

Flutter 跨平台工程实践:大型项目架构设计与模块拆分

大型 Flutter 项目的核心是。

2501_93893195的博客 868

CLion for Mac(m1)配置GCC编译器

条件:电脑已经下载过XCode 一. 下载HomeBrew homebrew是一款macos,linux下的包管理工具,我们需要使用他来下载GCC 下载方法: 1.打开终端(terminal) 2.输入 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ps.有可能会遇到的问题 我当初下载挂了VPN,优快云上还有很多解决问题的方法,可以将错误信

supermario19的博客 7847

【入门AUTOSAR网络管理测试】AUTOSAR网络管理规范需求解读

AUTOSARAutomotive Open System Architecture,汽车开放系统架构,由全球汽车制造商、部件供应商及其他电子、半导体和软件系统公司联合建立,致力于制定汽车电子软件标准的联盟。网络管理网络管理的目的是使网络中的ECU节点有序的睡眠和唤醒。在没有通信需求的时候睡眠,在需要通信的时候唤醒,可以节约汽车电池的电量。

测试领域技术分享 5167

Yep项目深度解析:如何构建高效的iOS社交应用

Yep是一款专为iOS平台设计的轻量级社交应用,围绕"遇见天才"的核心主题,致力于帮助用户发现领域精英和学习伙伴。作为一款优秀的iOS社交应用开发案例,Yep展示了如何通过合理的架构设计和最佳实践来构建高性能的移动社交产品。 ## 📱 Yep项目架构设计 Yep采用经典的MVC(Model-View-Controller)架构模式,清晰地分离了数据模型、用户界面和业务逻辑: **Model

gitblog_00647的博客 1049

《QGIS快速入门与应用基础》108:CGCS2000对应的投影坐标系

本文详细解析了CGCS2000地理坐标系对应的各类投影坐标系,包括高斯-克吕格3°带/6°带、UTM、地方独立投影和Web墨卡托投影。文章系统阐述了各投影类型的分带规则、参数设置、精度特性及适用场景,并提供了EPSG编码对照表和QGIS操作指南。通过"基准+投影"的绑定机制,这些投影坐标系实现了平面坐标与经纬度的精准转换,满足从大比例尺工程测量到Web地图服务等不同应用需求。内容涵盖投影原理、坐标格式、变形控制等关键技术要点,为GIS开发者和测绘人员提供了实用的参考信息。

LuckyHanMo的博客 543

Kotlin Multiplatform实战突破:1个跨平台项目打通iOS与Android

掌握Kotlin Multiplatform核心技术,1个项目同时运行iOS与Android。详解跨平台架构设计、共享业务逻辑与原生UI集成方案,提升开发效率达60%。适配主流应用场景,告别重复开发。kotlin程序员节特别分享,值得收藏

InstrGap的博客 1731

实战:爬取某小程序的订单数据(解析小程序 API 参数)

本文以美团外卖小程序为例,详细分析了电商类小程序订单数据接口的技术实现与采集方法。首先通过抓包定位核心接口,解析其请求参数;重点破解了token验证机制与sign签名加密算法,通过逆向分析还原参数生成逻辑;最后基于Python实现了订单数据的自动化爬取与存储。文章强调数据采集需遵守法律合规性,提供应对反爬机制的策略,并指出了必须在获得合法授权的前提下使用这些技术。该研究为数据采集工程师提供了实用的技术参考,但必须严格遵循"最小必要"原则,确保不违反平台规则和用户隐私保护法规。

2503_91057718的博客 2317

efm32 入门.pdf

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

移动端架构体系(二):本地持久化与动态部署

本地持久化的质量,本质是 边界是否清晰、语义是否可证明;动态部署的质量,本质是 把"可变"限制在商店与风险模型允许的层。

qq_25218777的博客 454

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

30 分钟跑通 Semantica 实操:从文档入图到按时间点回放知识图谱

Semantica 是一个 Python 知识图谱框架,把非结构化文档变成可查询、可导出、可按时间点回放的图结构,为 LLM 应用和 Agent 提供图原生上下文层。支持 Python 3.11–3.13,全文示例零模型、零 API Key。全文一条主线:装好验证 → 文档建图 → 可视化导出 → 时间点查询 → 接决策记忆。 ## 1. 快速验证:装好环境,打印第一批实体 ```bash p

gitblog_00289的博客 487

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

iOS开发初探小程序(上)

iOS开发初探小程序 楼主本人是一枚iOS程序媛,团队内部分享本人选题是小程序研究,所以以一个iOS开发的视角记录一下探究历程,如果有误,欢迎大佬们评论区指正。 官方小程序项目搭建步骤: https://developers.weixin.qq.com/miniprogram/introduction/qcloud.html 账号可以自己申请一个,使用未开通过其他公号服务的邮箱就能申请了,...

Nefertari_YinC的博客 3680

Grok iOS Projects功能解析:从AI问答到项目级协作开发环境

在软件开发领域,AI编程助手正从零散的代码问答工具向深度集成的协作环境演进。其核心原理在于通过持久化项目上下文,解决传统对话中信息碎片化与知识不连贯的痛点。这一演进的技术价值在于将AI的辅助能力从单点问题解答,提升至理解项目整体架构、技术决策和代码演进的全流程。具体到应用场景,开发者可以为每个独立项目创建专属的AI工作区,所有对话、代码片段和文件引用都关联其中,形成持续积累的项目记忆。这实质性地改变了代码组织与知识管理的方式,例如在iOS开发中,围绕SwiftUI、Core Data等技术栈的讨论与决策得以

weixin_30655569的博客 297

Messenger 自定义聊天主题教程:CoreData + IGColorPicker 持久化气泡色的完整实现

Messenger 是一款 iOS 实时聊天应用(Real-time messaging app),它的"自定义聊天主题"功能允许用户用颜色选择器自由更换聊天气泡、背景和文字颜色,并借助 **CoreData + IGColorPicker** 把选中的气泡色持久化保存,重启 App 后主题依然生效。本文带你快速看懂这套聊天主题持久化方案的设计思路。 [![Messenger 自定义聊天主题颜色

gitblog_00517的博客 152

从单文件 MVP 到分层架构:ArkUI 应用如何安全拆分而不破坏功能

第一版把五个 Tab、弹窗和状态都放进一个 ArkUI 页面,开发速度很快;功能稳定后,文件会逐渐变成维护瓶颈。本文以真实项目为例,讨论何时拆分、按什么顺序拆分,以及如何避免重构后状态不刷新和数据语义漂移。

Magic-ZYJ的博客 405

React Native V2EX 开源项目教程

React Native V2EX 开源项目教程 项目介绍 React Native V2EX 是一款基于 React Native 构建的V2EX移动客户端应用程序。该项目旨在提供一个React Native快速开发的示例框架,利用V2EX开放API获取数据。当前项目已适配至RN 0.71.5版本。它不仅是一个实际的应用实例,也展示了如何高效地构建和管理一个移动应用。 项目快速启动 先决条件 确...

gitblog_00820的博客 1358

Flutter image_picker_ios 深度指南:iOS 端联邦插件实现原理与实战配置

本文围绕 Flutter 官方插件仓库(`plugins`)中的 [image_picker_ios](https://link.gitcode.com/i/055ba29ded571111d1159dbe5d4ec708) 展开,讲解这套由 Flutter 团队维护的 iOS 端图片选择实现:它如何以"endorsed 联邦插件"的形式被 `image_picker` 自动带入工程、需要做哪些

gitblog_00821的博客 641

Multi-Agent Particle Environment 完整指南:5 分钟跑通多智能体强化学习粒子环境

Multi-Agent Particle Environment(multiagent-particle-envs)是 OpenAI 开源的 MARL 实验环境,用简单几何实体与运动规则模拟合作、竞争和通信行为。本文面向想快速搭建多智能体强化学习实验的开发者,覆盖安装、场景定制与排障。 ## 项目定位:一套低成本的多智能体沙盒 它不是物理仿真器,而是一套为 MARL 设计的微型实验设施:实体只

gitblog_00241的博客 441

Unity游戏开发:基于SQLite的背包系统完整实现与数据持久化指南

在游戏开发中,数据持久化是确保玩家进度和游戏状态得以保存的核心技术。其原理是通过将运行时数据存储到非易失性介质中,实现游戏状态的持久保存。这项技术的价值在于提升玩家体验的连贯性和游戏世界的可信度,尤其对于RPG、生存和模拟经营等包含大量物品管理的游戏类型至关重要。本地数据库方案,如SQLite,因其轻量、高效和强大的查询能力,成为单机或弱联网游戏数据管理的优选。通过关系型数据库设计,开发者可以高效处理物品的增删改查、复杂查询(如分类筛选)和事务性操作,确保数据一致性。本文将结合Unity引擎,详细讲解如何利

weixin_33835103的博客 439

微信小程序:授权问题(scope.userInfo【废弃】)

今天发现微信废弃了授权API:’scope.userInfo’ wx.getSetting({ success(res) { if (!res.authSetting['scope.userInfo']) { wx.authorize({ scope: 'scope.userInfo', ...

Jane's Blog 2万+
上一篇: iOS项目拆分:数据本地持久化(1)
下一篇: iOS项目拆分:数据本地持久化(3)
黑萝卜不黑
博客等级 码龄11年 41粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值