欢迎各位 点赞谈论,感觉有用的朋友能够重视笔者大众号 iOS 成长指北,继续更新
在阅览哀殿 从底层剖析一下存在跨进程通讯问题的 NSUserDefaults 还能用吗? 一文中,了解到因为 NSios体系UserDefaults
底层结束中存在直接或许直接的跨进程通讯,在主线程同步调用容易发生卡死。
发现现已运数据库办理体系用过很久的 NSUserDefaults
了,但approve是似乎从来没有好好了解过 NSUserDefaults
。
什么是 NSUserDefaults
NSUserDefaults
是 iOS 开发者常缓存整理用的耐久化东西,一般用于在使用程序的发起过程中耐久化存储键值对,一般主张只存储少数的数据。
在作业时,你运多线程是什么意思用 NSUserDefaults
政策缓存视频兼并获取使用程序运用的默许值。NSUserDefaults
会缓存信息,多线程和多进程的区别来避免每次获取都需求翻开默许的底层数据库。当设置默许值时,它将在进程中同步更改,并异步更改到耐久存储和其他进程。
一个很多人不知道的点,NSUserDefaults
支撑 KVO 获取而且能够挑选在告诉中心注册 NSUserDefaultsDidChangeNotification
的观察者,以便获得对本地默许数据库的一切更新的告诉。
当咱们运用 NSUserDefaults
是会存在两个关于设备处理或设备用户处理的特数据库办理体系殊处理。假定你的使用程序支撑保管环境,那么能够经过 NSUserDefaultsappearance
设置用户的身份或许是在教育组织处理的设备上作业ios退款的使用程序能够运用 iCloud 密钥值存储区与用户其他设备上的其他实例同享少数数据。
你能够经过检查 《Mobios14ile Device Management Protocol Reference》[1]、《Storing Preferences in iCloud》[2]和《Preferences and Settings Programming Guide》[3]缓存文件在哪里 来获取更多信息。
这为青少年方式的结束供给了一种思路。
支撑跨域,或许说支缓存视频兼并app下载撑沙盒跨域。当咱们运用 NSUserDefaapplicationults
时,咱们能够经过运用ios退款 suiteName
用于保存在多个使用程序之间同享的值。
NSUserDefaults
是线程安全的,其数据库体系底层是运用 os_unfair_lo缓存文件在哪里ck
来确保线程安全, synchronize
函数在项目开发时变得不再多线程原理那么必要。
NSUserDefaults
存储在哪里
当咱们运用 **NSUserDefaults
**存储数据时
NSUserDefaults *userDefault = [NSUse缓存和下载的区别rDefappearanceaults standardUserDefaults];
[userDefault se数据库体系工程师tObject:@"iOS成长指北" forKey缓存视频变成本地视频:@"Name"];
[userDefault setObject:@"15" forKey:@"A缓存和下载的区别ge"];
[userDefault setObject:@"123456" for多线程原理Key:@"Password"];
其本质是在沙盒的 Library/Preferences 下生成一个以缓存视频怎样转入本地视频 Bundle identifie多线程面试题及答案r
为名的 .plist
文件并存储数据。文件中的字符和信息是明文的,假定你存储的数据是秘要的且重要的,不主张你运用 NSUserDe缓存视频怎样转入相册faults
,其安全并不能得多线程面试题到确保。
因为缓存的存在,咱们在运用 NSUse数据库是什么rDefaults
一般不必过火担忧其读数据数据库体系的特色的速度,可是咱们应该留心 避免数据过多导致内存压力过大
NSUserDefaults
中的域approve
当咱们运用 NSUserDefaults
存储数据时缓存和下载的区别,咱们一般运用 standardUserDef数据库体系的中心是aul多线程面试题及答案ts
来获取其时的单例政策。假定单例政策尚不存在,则会运用包括以下域称号的查找列approach表的次第创建数据库体系该方ios下载针:
-
仅关于被处理的设备,包括由处理员设置的默许值的域
-
NSArgumentDomain:代表的是命令行参数,数据库体系能够在 Edit Scheme->Arguments->Arguments Passed O多线程面试题及答案n Launch 中增加,格局为
-key plistvalue
。 -
关于仅由教育组织处理的设备,一个域包括在 iCloud 键值存储中设置的默许值
-
Application:使用程序域,默许设置的值在ios14怎样封闭app资料库 Application 域中
-
NSGlobalDomain:全局域,给定用户在缓存一切使用程ios8备忘录序之间同享的域。其办法的结束是根据
suiteName
结束的。//增加适用域 - (void)addSuiteNamed:(NSString数据库办理体系 *)suiteName; //增加适用域 - (void)removeSuiteNamed:(NSString *)suiteapplicationName;
-
NSRegistrationDomain:一组临时默许值,其值能够由使用程序设置,以确保查找将一直成功。
咱们能够经过运用NSReg数据库体系的特色istrationDomain 创建数据库设计默许值来让削减获取值的判别。
运用办法
关于 NSUserDefaults
的运用,咱们需求留缓存视频兼并心什么吗?
-
NSUserDefaults
还能用approach吗?答案是还能用的,只要不要频频的去批改缓存视频兼并值。
-
咱们应该用
NSUserDefaults
去存储什么?应该去存储一些少数的且并不是十分灵敏的数据,例如用户的一些设置,一些符号。
-
还需求加
synchronize
吗?只要第一次初始化或许调用
set... forKey:
相关的办法时,才会触发多进程通讯,一旦写入的话因为其多线程安全,关于是否需求加synchronize
就看个人习惯了,习惯了就加,不习惯就不加。
保存文件的引用
在官方文档上提及的一个关于 setURL:forKey:
的运用,当咱们存储文件数缓存视频兼并app下载据时,可能会发生用户移动该文件,下次翻开使用程序时无法定位改文件。你能够运用bookmarkDataWithOptions: inclingresourcevaluesforkeys:relativeToURL:error:
办法来创建 NSURL数据库原理 书签数据,并运用 setObject:forKey:
办法来耐久化它。然后,你能够运用application URLByResolvingBookmarkData:oappearptions:relativeToURL:bookmarkDataIsStale:error:
办法来将存储在用户默许值中的书签数据解析为文件 URL 并存储运用
参考资料
- Mobile Device Maapproachnagement Protocol Reference
- Mobi缓存le Device M数据库是什么anagement Protocol Reference
- Preferences and Settings Programming Guide
假定你有任何问题、谈论或反馈,请随时联络。假定你乐意,能够经过火享这篇文章来让更多的人发现它。
感谢你阅览本文!