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

NSArray和NSMutableArray类在内存中占用的大小是否相同?

NSArray和NSMutableArray类在内存中占用的大小是不相同的。

NSArray是不可变的数组,一旦创建后,其大小和内容都不能被修改。它在内存中占用的大小是固定的,由数组中元素的数量和类型决定。NSArray中的元素是指针类型,指向实际的对象,因此占用的内存大小与对象的大小有关。

NSMutableArray是可变的数组,可以动态地添加、删除和修改其中的元素。由于NSMutableArray可以随时改变大小,它在内存中占用的大小是可变的。当NSMutableArray的元素数量增加时,它会动态地分配更多的内存空间来存储新的元素。

总结起来,NSArray和NSMutableArray在内存中占用的大小是不同的。NSArray的大小是固定的,由元素的数量和类型决定,而NSMutableArray的大小是可变的,根据元素的数量动态分配内存空间。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JVM系列之:String,数组集合内存占用大小

简介 之前文章,我们使用JOL工具简单分析过String,数组集合内存占用情况,这里再做一次更详细分析介绍,希望大家后面再遇到OOM问题时候不再抱头痛哭,而是可以有章可循,开始吧。...注意最后面的Object数组,如果数组存储不是基础类型,那么实际上存储是执行该对象指针,该指针大小是4个字节。...String String是一个非常特殊对象,它底层是以byte数组存储。 注意,JDK9之前,String底层存储结构是char[],一个char需要占用两个字节存储单位。...再加上hash,coder,hasIsZero属性,最后大小是24字节。 我这里使用是JDK14String版本,不同版本可能有所不同。...当然这只是这个String对象大小,不包含底层数组大小。 ? 我们来计算一下String对象真实大小: String对象大小+byte数组大小=24+32=56字节。

64010

Objective-C集合

下面详细介绍Objective-C集合以及每个集合用法,学过其他面向对象编程语言小伙伴们看到OC集合会有种莫名亲切感,理解起来问题不大,可以类比Java集合去学习...Objective-C集合主要包括不可变数组--NSArray,  可变数组--NSMutableArray,   不可变字典--NSDictionary,    可变字典--NSMutableDictionary...NSArray也是OC一个对象,使用NSArray也需要进行实例化,前面的博客初始化中提到了便利初始化函数便利构造器,NSArray也少不了这两样东西我们可以通过NSArray便利初始化函数或者便利构造器进行...(4)判断两个Set是否相同 : - (BOOL) isEqualToSet: (NSSet *) otherSet;     ​    ​    ​    ​(5)判断一个元素是否本集合 -(BOOL...= set2"); }   //查看一个元素是否一个set if ([set1 member:@"aa"]) {     NSLog(@"aa set1"); }     ​运行结果为: 1

1.1K70

iOS-Foundation框架中常用

当系统准备要在内存创建字符串对象时候,会先检查内存是否相同内容字符串对象,如果有,直接指向该内存区域,如果没有才会重新创建。...str1与str2指向相同地址 注意:存储常量区数据不会被回收. 所以存储常量区字符串对象也不会被回收. NSString常用方法 使用拼接方式创建1个NSString对象。...- (unichar)characterAtIndex:(NSUInteger)index; 判断当前字符串对象传入字符串对象内容是否相同。...所以,判断主字符串是否包含子字符串,只需要判断返回NSRange结构体变量length是否为0就可以。 主串搜索子串.从后往前搜索. 第1次匹配子串....是NSArray子类,所以NSMutableArray也可以用来存储数据,唯一不同NSMutableArray是可变数组,存储该数组元素可以删除,也可以动态增加元素,其他用法均与NSArray

1.7K100

OC知识--Foundation框架详尽总结之『数组

框架数组NSArray、MutableNSArray)使用做一个详细总结。...NSArray介绍 NSArray是OC数组,开发建议尽量使用NSArray替代C语言中数组 C语言中虽然也有数组,但在开发过程存在一些弊端 int array[4] = {10, 89...NSArray快速遍历 NSArray *arr = @[@"abc", @"edf", @"hij"]; // OC数组可以使用OC增强for循环来遍历 // 逐个取出arr元素,将取出元素赋值给...block // 每次调用block都会将当前取出元素元素对应索引传递给我们 // obj就是当前取出元素, idx就是当前元素对应索引 [arr enumerateObjectsUsingBlock...NSArray排序 1.NSArray排序 Foundation自带排序 使用compare方法对数组元素进行排序, 那么数组元素必须是Foundation框架对象, 也就是说不能是自定义对象

67440

Objective-CNSArray解读

Objective-CNSArray解读     NSArray数组是Objective-C语言中常用也是重要一个,除了开发中常用到一些基础功能,NSArray及其相关还封装了许多更加强大功能...)indexOfObject:(ObjectType)anObject inRange:(NSRange)range; //获取与给定元素相同元素在数组最小下标值 - (NSUInteger)indexOfObjectIdenticalTo...:(ObjectType)anObject; //在一定范围内 获取与给定元素相同元素在数组最小下标值 - (NSUInteger)indexOfObjectIdenticalTo:(ObjectType...)anObject inRange:(NSRange)range; //判断两个数组是否相同 - (BOOL)isEqualToArray:(NSArray *)otherArray...NSArray *)initWithContentsOfURL:(NSURL *)url; //获取数组所有元素 需要传入分配了内存C指针 - (void)getObjects

1.3K20

「多图警告」手撕排序算法 - iOS进阶必备

相同元素不会改变位置,故为稳定排序; 空间复杂度:它是原序列进行排序,故为 O ( 1 ); 时间复杂度:排序过程,首先要遍历所有的元素,然后已排序序列中找到合适位置并插入。...图中 L,R 是指快速排序开始时序列起始结束索引,一趟快速排序,它们值不会发生改变,直到下一趟排序时才会改变。 ?...b、「合」,对单个元素序列进行合并,A11A12合并为[ 1, 8 ], A21 A22 合并为 [ 4, 6 ],等等。合并过程也需要排序。 ?...比较」思想,总是比较两个元素大小,然后交换位置。...遍历 arr,把 arr 元素放到 counArr ,counArr 大小是由 arr 中最大元素最小元素决定。 ?

88520

YYImage 源码剖析:图片处理技巧

两种加载方式区别 从上面的分析可知,imageNamed:使用时会产生全局内存占用,但是第二次使用同一张图片时性能很好;imageWithData:不会有全局内存占用,但对于同一张图片每次加载和解压都会...这时,若还使用常规方式加载会占用过多内存;况且,若图片像素过大(目前主流 iOS 设备最高支持 4096 x 4096 纹理尺寸),显示时候 CPU GPU 都会消耗额外资源来处理图片。...高效动态内存缓存管理,以保证高性能低内存动画播放。 完全兼容 UIImage UIImageView,使用方便。 保留可扩展接口,以支持自定义动画。 每个方法都有完善文档注释。...然后利用CALayercontentsRect属性,动态读取这张大图某个范围内容。当然,这个过程逻辑同样YYAnimatedImageView。...required //帧数量 - (NSUInteger)animatedImageFrameCount; //动画循环次数 - (NSUInteger)animatedImageLoopCount; //每帧在内存大小

1.3K41

@property 关键字区别 - copy & mutableCopy

原理:strong -> 内存地址不变,还是指向本来那块内存,此时指向是29行arrayM,arrayM发生改变时候,由于还是指向这块内存地址,我们strongArray 虽然是 NSArray...,却也跟着arrayM改变了 喜欢NSArray上使用strong 修饰朋友看过来了!!...使用copy 修饰 NSArray ,会copy一份新内存地址,不会出现上述情况!...上述问题只是面试可能遇到,顺便带一下,本文主要内容了:mutableCopy copy 关系; 简单说,copy -> mutableCopy ==  NSarray + mutableCopy...原理:探究-->mutableCopy: no1.测试mutableCopy 是否会改变数组值 测试mutableCopy 是否会改变数组值 如图,如图仅是使用mutableCopy,并不会影响到数组内容

84870

iOS浅复制与深复制

深复制:复制对象内容,两个对象指向两个不同地址内容,操作一个时不会影响另一个值。 OC,因为采用内存计数方式管理内存,所以浅复制时会对同一个内容计数加一,深复制则不会。...OC,复制操作有copymutableCopy两种方法,那哪种是浅复制哪种是深复制呢? 非集合对象 先把对象大致分为两:非集合对象与集合对象,至于为什么要这么分,待会讲集合对象时候再说。...所以非集合对象又可以分为可变对象不可变对象。...OC,当你对一个集合对象做深复制时,这个深复制只是单层,集合内元素对象其实还只是引用,并不是每一层都是深复制,这一情况,苹果定义为单层深复制(one-level-deep copy)。...:[NSKeyedArchiver archivedDataWithRootObject:oldArray]]; 结 以上就是OC浅复制与深复制各种应用了,要自己测试到底操作是浅复制还是深复制,可以通过看对象引用计数是否增加

50720

实际开发深浅拷贝问题 - 解答

string3 都是 copy,发现内存地址string 一样; 而string2 string4 都是mutableCopy,内存地址都不一样; copy = 浅拷贝?...增加 copy协议~ NSArray *array = @[@"1",@"2"]; NSArray *tempArray = [[NSArray alloc]initWithArray:array...rootVcDatas twoVC 自身数据源 _datas已经是不同array了,内存地址都不一样,却还是存在demo问题 猜测3 :点击导航条return时候,把数据源数组给回传到前一个控制器了...image.png image.png 猜测4:twoVC修改model oneVC内存地址同一个 ,等价于model是同一个。...==> 所以导致虽然数组不一样,但是里面的内容一样(model都是一样),所以twoVC,textField 结束编辑时候,修改当前model数据,其实oneVC,同个地址model也被修改了

69240

OC学习13——Foundation框架集合

NSArray代表有序可重复集合;NSSet代表无序不可重复集合;NSDictionary代表具有映射关系集合。显然,这三集合分别对应这JavaList、SetMap。   ...NSArray分别提供了方法实例方法来创建NSArray,两种创建方式基本类似,只是方法以array开头,实例方法以init开头。...来创建NSArray   参考NSArray文档,可以看到NSArray集合方法大致包含如下几类: 查询集合元素NSArray索引,即下标 根据索引值取出NSArray集合元素 对集合元素整体调用方法...NSArray有一个子类NSMutableArrayNSMutableArray代表集合元素可变集合,因此,程序可以向集合添加新元素,可以删除集合已有的元素。   ...)    NSSetNSMutableSet区别与NSArrayNSMutableArray之间区别是一样

2.1K80

Objective-C深拷贝浅拷贝

Objective-C对象之间拷贝分为浅拷贝深拷贝。说白了,对非容器浅拷贝就是拷贝对象地址,对象里面存内容仍然是一份,没有新内存被分配。...对容器深拷贝是对容器每个元素都进行拷贝,容器浅拷贝是对容器里内容不进行拷贝,两个容器地址是不同,但容器里所装东西是一样一个容器修改值,则另一个浅拷贝容器值也会变化。...所以对非容器看对象是否为深拷贝还是浅拷贝就得看对象内存地址就可以看出来,而对容器,我们则进一步看容器内容了。...可变内存大小是可以根据需要改变,而不可变就是分配完以后就不可以改变他内存空间(以上是本人理解,不足或理解偏颇之处还请批评指正,转载本文请注明出处)                 1....                4.容器可变对象: 比如NSMutableArray         观察深浅拷贝之前先得了解一下retain,copymutableCopy特点,特点如下:

1.1K90

iOS开发:NSSet使用

前言 iOS开发过程,有些时候会用到去重处理,也就是去掉重复元素或者个数,然后再进行排序处理,这就使用到了集合(NSSet),它其实是一种哈希表,通过运用散列算法来查找集合元素。...集合和数组相同点:都是存储不同元素地址,不同点:NSSet元素都是被自动过滤之后不会重复元素,NSArray元素却是允许重复;NSSet是一个无顺序集合,NSArray是一个有顺序集合...一、基本常用方法 (一)NSSet 1、集合初始化: NSSet初始化时候,赋值时候如果放入两个相同元素的话,会自动删除其中一个相同元素。...mSet2相同元素 结果为:2,3,4,5 3、判断集合是否含有某个元素 BOOL ret1 = [set1 containsObject:@“Apple”]; //判断集合是否含有@“Apple...]; NSMutableArray *marr = [[NSMutableArray alloc] initWithArray:aa]; if (marr.count > 20) {

1.5K64

iOS 斗地主发牌排序

规则.png ---- 文章灵感来源是群友iOS群所问问题 ?...getArr,判断给这个getArr数组是否包含allArr数组元素,不包含从allArr删除,最后得到allArr就是getArr按allArr排序方式排列数组 可能没看懂,那么接下来我们来抽象它...随机打乱2.png 接下来我们随便构造一个范围,取出混合后54张牌这个范围内17张牌: NSRange range = NSMakeRange(10, 17); NSArray...getArr数组是否包含allArr数组元素,不包含从allArr删除,最后得到allArr就是getArr按allArr排序方式排列数组 思想allArr就是我们代码allPokerArr...张牌这个范围内17张牌 NSRange range = NSMakeRange(10, 17); NSArray *newArr = [mixArr subarrayWithRange

1.2K60

iOS 二级菜单(UITableView实现)「建议收藏」

2 如果有子菜单点一下打开,如果没有,则实现相应操作; 我们来实现他(界面有点丑,但主要是功能,界面很简单自己设计一下就行): 个人想法是这样: 首先建立一个cell,用于存放cell内容...} return self; } @end .storyboard 拖一个uiviewtable控件;并且与设置属性 就是下面的TableView 并建立关联 或许我只是贴出代码来并不那么容易理解...; 下面我说一下大体思路吧; 当选中cell时候看看这个cell有没有子菜单,如果没有很简单直接打开就行了; 如果有那么我们先将这些子菜单想办法添加到掌管父菜单数组,然后生成一个位置数组(为了...tableview调用 insertRowsAtIndexPaths: withRowAnimation: 这个函数进行插入操作并且带有动画); 删除操作相同意思先从控制父菜单数组删除,然后同样生成位置数组调用函数删除...:(TableCell *) item;//删除视图处理函数 好了来写: 工程没有其他了,下面就是自动建好…….Controller.h了 #import @class

1.2K30

ARC内存管理容易忽略问题

这种指针不通过解引用isa来获取其所属,而是通过接下来三位一个索引。该索引是用来查找所属是采用Tagged Pointer哪个。剩下60位则存储数据。...下面的测试demo向不可变NSString、NSArray、NSDictionary以及NSSet对象发送copy消息,得到了immutable新对象,但是问题是:copy是深拷贝还是浅拷贝了?...2.3、浅拷贝与深拷贝 对象拷贝有两种方式:浅拷贝(指针复制)深拷贝(内容复制),浅拷贝,并不拷贝对象内容,仅仅是拷贝指向对象指针;深拷贝是直接拷贝整个对象内容到另一块内存。...keyvalue内存管理是,对key进行copy,对value进行强引用。...对key内存管理为copy,复制时候需要考虑对系统负担,因此key应该是轻量级,所以通常我们都用字符串和数字来做索引,但这只能说是key-to-object映射,不能说是object-to-object

95620
领券