如果我有一个带有某些值的数组,即分配了一些内存。 如果我为阵列分配新的内存,前一个内存会发生什么。
self.array = [[NSMutableArray alloc] initWithObjects:anObject, nil];
self.array = [[NSMutableArray alloc] initWithObjects:anObject2, nil];
objet anObject
的内存会发生什么,它会保留在内存中还是会在分配新内存后自动从内存中删除?
答案 0 :(得分:0)
第一个数组@"1"
上的对象实际上是指向NSString
对象的指针。
通过覆盖数组中的值释放指针后,将释放NSString
实例占用的内存。新的字符串对象(@"2"
)不一定存储在同一个内存中。
答案 1 :(得分:0)
在第二次分配内存时,以前的数据会丢失 self.array = [[NSMutableArray alloc] initWithObjects:@" 2",nil];从先前的内存位置执行此对象 self.array = [[NSMutableArray alloc] initWithObjects:@" 1",nil]; 将不再存在。
答案 2 :(得分:0)
objet anObject的内存会发生什么,它会保留在内存中还是会在分配新内存后自动从内存中删除?
不可能肯定地回答这个问题,因为它取决于其他未知的因素。
我认为你试图理解的是数组的内存所有权模型(NSArray
,`NSMutableArray)。希望这个猜测是正确的:
首先考虑所有权。一个对象是由它的第一个所有者创建的,可以在其生命周期内拥有多个所有者,并且在没有所有者之后的某个时间会死亡。在ARC下,所有权都可以与 strong 和 weak 等属性结合使用。在MRC下,所有权均使用retain
和release
等方法进行手动操作。
数组,字典,集合等使用该模型:
将项目添加到集合时,将对该项目进行所有权。
当从集合中删除某个项目时,所有权将被放弃。
当一个集合本身变为无主时,它会放弃它所包含的所有项目的所有权。
因此,在您的特定情况下,anObject
发生的事情至少取决于:
第一个NSMutableArray
是否有其他所有者。
anObject
本身是否有其他所有者。
还有一些对象是应用程序有效拥有的,因此它们似乎永远不会消亡(它们会在应用程序终止时死亡)。一个常见的不朽对象是一个字符串文字,所以如果anObject
是一个字符串,它可能会继续存在。
HTH