在平时的iOS开发中,我们经常用到的数据持久化存储方式大概主要有:NSUserDefaults(plist),文件,数据库,归档。。前三种比较经常用到,第四种归档我个人感觉用的还是比较少的,恰恰因为用的比较少,但是还是有地方要用到,所以今天再把归档解档复习一遍吧。一、什么是归档: 对象归档是将对象以文件的形式保存到磁盘中(也称为序列化,持久化) ;使用的时候读取该文件的保存路径读取文件的内容(也
转载
2023-08-19 16:56:37
39阅读
文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类。一般来说,这些函数可以满足大多数场合的要求,但是对于某些特殊应用领域所需要的动辄几十GB、几百GB、乃至几TB的海量存储,再以通常的文件处理方法进行处理显然是行不通的。目前,对于上述这种大文件的操作一般是以内存映射文件的方式来加以处理的。
内存映射文件与虚拟内存有些
转载
2023-07-18 00:04:20
133阅读
iOS开发之内存管理 文章目录iOS开发之内存管理引用计数(Reference Count)内存管理的思考方式对象操作与对应的Objective-C方法autorelease权限修饰符__strong修饰符循环引用__weak修饰符__unsafe_unretained修饰符__autoreleasing修饰符属性修饰符assign修饰符copy修饰符参考资料更新中 引用计数(Refere
转载
2023-07-25 09:42:26
78阅读
转载地址:iOS的文件内存映射——mmap
转载
2023-05-22 11:17:42
176阅读
内存映射文件,初次听说,不知道它和虚拟内存有什么区别,也不知从何说起。经过一番查询和研究,下面,我先解释一下我对内存映射文件这个词的理解,解释下原理,然后具体说明其用法。这是数据结构一个很偏僻但是很经常出现的面试考点,希望大家注意。原理 “映射”,就和数学课上说的“一一映射”是一个意思,就是建立一种一一对应关系,在这里主要是只 硬盘上文件 的位置与进程 逻辑
转载
2023-11-26 10:25:52
37阅读
一、原理首先,“映射”这个词,就和数学课上说的“一一映射”是一个意思,就是建立一种一一对应关系,在这里主要是只 硬盘上文件的位置,与进程 逻辑地址空间中 一块大小相同的区域之间的一一对应,如图1中过程1所示。这种对应关系纯属是逻辑上的概念,物理上是不存在的,原因是进程的逻辑地址空间本身就是不存在 的。在内存映射的过程中,并没有实际的数据拷贝,文件没有被载入内存,只是
转载
2023-07-20 15:28:41
113阅读
对于一个优秀的app来说,缓存机制必不可少。图片,视频,音频等等各种类型的文件,怎么样去更好的管理这些数据,这对于我们开发者以及用户都是息息相关的。闲话不多说,先来看看几个github开源中牛逼的几个缓存框架。它们的使用方式都很类似,都是通过键值对(key-value)的形式进行存取,跟NSUserDefaults用法类似。以下排名按照性能由低到高:1.EGOCache只提供磁盘缓存,没有内存缓存
转载
2023-10-24 13:31:55
106阅读
在早期的iOS开发中,并没有ARC模式,只有MRC模式,必须由开发人员自己管理内存,过程非常繁琐而且容易造成内存泄漏,如今的iOS开发虽然基本都是用的ARC模式,但是有些情况下还是需要我们自己来管理内存,稍有不慎,就可能造成内存泄漏,所以,使用一款内存泄漏的检测工具还是非常有必要的。接下来咱们就一起看看Leaks这个工具的使用方法。 第一步:新建一个工程,名字随便取。在MRC模式下,咱们
转载
2023-08-25 17:21:57
93阅读
为什么要进行内存管理? iPhone手机的内存是有限的,目前最大内存是2G,当运行频繁多的app的时候,会占用大量的内存,当我们的app占用的内存大于40M的时候,ios系统会发出警告,当超过45M的时候系统会发出第二次警告,当占用内存超过120M的时候,app会闪退,所以我们需要对内存空间进行一个合理的管理,用以保证我们的app能够流畅的运行;什么是内存管理?当我们编写程序的时候,会声明各种各
转载
2023-09-10 20:39:41
79阅读
栈区(stack)概述:栈是向低地址扩展的数据结构,是一块连续的内存区域。由栈顶的地址和栈的最大容量是系统预先规定好的。栈的空间很小,大概1-2M。超出overflow。使用:栈区,就是函数(方法)运行时向系统请求的内存。栈中的局部变量,参数由编译器分配和释放,函数运行就分配,函数结束就释放,由系统完成。是系统数据结构,对应进程唯一。特别注意:系统栈的剩余空间 大于 所申请的空间,系统为程序提供内
转载
2023-09-24 16:12:33
54阅读
一、自动释放池
自动释放池,任何标记为自动释放并因此添加到池中的对象,将在池本身被释放的同时也自动释放,程序可以有多个自动释放池,它们还可以是嵌套的。
如果程序在运行时将产生大量的临时对象,就可能需要在程序中创建多重自动释放池。例如:
for (int i = 0; i < 1000000; i++) {
NSString *string = [NSStrin
转载
2023-07-04 13:43:55
56阅读
内存布局IOS的内存布局除了我们知道的内存五大区,还有内核区和保留区,我们知道虚拟内存分配了4GB的空间,前面3GB分配给了保留区和五大区,剩下的1GB是给内核区使用的内核区是用来给系统内核操作处理的区域,保留区是给系统处理等内存管理方案ARC和MRC在早期的苹果系统里面是需要我们手动管理内存的,手动内存管理遵循谁创建,谁释放,谁引用,谁管理的原则IOS5之后苹果引入了ARC(自动引用计数),AR
转载
2023-10-13 19:56:55
97阅读
iOS底层探索--内存管理1. 五大分区全局变量和局部变量在内存中是否有区别?有什么区别?Block中是否可以直接修改全局变量全局静态变量的修改2. TaggedPointer3.NONPOINTER_ISA的优化3. retain & release & retainCount & dealloc分析retain 和 release 分析RetainCount 分析de
转载
2023-11-23 09:40:13
53阅读
在iOS中,大家平常经常说堆区,栈区,其实这些都是存在虚拟内存虚拟内存可以主要分为五个大区(堆区、栈区、全局区、常量区、代码区)。一、堆区(heap)■ 是由程序员分配和释放,用于存放运行中被动态分配的内存段。大小不定,可增加和缩减 ■ 堆向高地址扩展的数据结构,是不连续的内存区域。程序员负责在何时释放内存(如用free或delete),在iOS的ARC程序中,系统自动管理计数器,计数器为0的时候
转载
2023-07-12 22:01:39
69阅读
在 DoorDash,我们一直在努力通过提高应用程序的稳定性来提高我们的用户体验。这项工作的主要部分是防止、修复和消除我们大型代码库中的任何保留周期和内存泄漏。为了检测和修复这些问题,我们发现 Memory Graph Debugger 快速且易于使用。在我们的 Dasher iOS 应用程序上显着提高了我们的无 OOM 会话率之后,我们想分享一些关于避免和修复保留周期的技巧,以及使用 Xcode
转载
2024-01-20 05:01:21
154阅读
看了蛮多的说是有关ios内存的文章,说什么的都有;而且也没多少说的很全面的,自己动动手记录下自己感觉比较正确且有用的内容好了,仅是到目前为止我自己所了解范围内的,后面有知道新的内容就慢慢更正好了。一、以下到分割线之前便是ios内存管理的相关内容,一些原理和介绍内容(这些网上一大堆的);分隔线之后是一些代码实例ios的对象继承于NSObject, 该对象有一个方法:retainCo
转载
2024-08-06 21:00:31
44阅读
下面介绍了 iOS 优化 ipa 安装包大小的几种方法。 一、配置编译选项 Genetate Debug Symbols 设置为 NO Generate Debug Symbols 这个设置在 DEBUG 和 RELEASE下 均默认为 YES。 当 Generate Debug Symbols 设置为 YES 时,编译产生的 .o 文件会大一些,当然最终生成的可执行文件也大一些。 当 Gene
转载
2023-12-23 10:38:48
104阅读
IOS开发内存管理详解
一、 基本原理 1. 什么是内存管理移动设备的内存极其有限,每个app所能占用的内存是有限制的当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。比如回收一些不需要使用
转载
2024-06-25 17:43:55
51阅读
iOS中的五大内存区域iOS中的内存区域从低地址到高地址分别为 .text段(代码区)、.data段(已初始化的全局变量、静态变量)、.bss段(未初始化的全局变量、静态变量)、堆区、栈区。 image.png保留段:用于给系统提供一些必要的空间; 内核区:由系统使用;这里说明一点:栈区从上往下走,堆区会从下往上走,当两个相遇的时候,则会发生堆栈溢出。// 一般0x1开头的是 常量 静态
转载
2024-04-15 06:39:38
49阅读
iOS中内存分区iOS内存模块应用在内存中运行,不同的类型在内存处于不同分区。 按照内存地址由低到高分为:代码区、常量区、全局/静态区、栈、 堆、栈、全局区/静态区、常量区、代码区如下图:代码区在内存的最低地址区间,用于存储编译完成后代码部分。常量区用于常量内存分配,由系统维护全局区/静态区(static)主要为全局变量和静态变量分配内存,分为、初始值和未初始过的两个部分。堆(heap)由开发者分
转载
2023-07-25 09:36:18
89阅读