分配对象的先前内存会发生什么?

时间:2016-08-09 09:34:43

标签: objective-c memory-management

如果我有一个带有某些值的数组,即分配了一些内存。 如果我为阵列分配新的内存,前一个内存会发生什么。

self.array = [[NSMutableArray alloc] initWithObjects:anObject, nil];

self.array = [[NSMutableArray alloc] initWithObjects:anObject2, nil];

objet anObject的内存会发生什么,它会保留在内存中还是会在分配新内存后自动从内存中删除?

3 个答案:

答案 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下,所有权均使用retainrelease等方法进行手动操作。

数组,字典,集合等使用该模型:

  • 将项目添加到集合时,将对该项目进行所有权。

    • 当从集合中删除某个项目时,所有权将被放弃。

    • 当一个集合本身变为无主时,它会放弃它所包含的所有项目的所有权。

因此,在您的特定情况下,anObject发生的事情至少取决于:

  • 第一个NSMutableArray是否有其他所有者。

  • anObject本身是否有其他所有者。

还有一些对象是应用程序有效拥有的,因此它们似乎永远不会消亡(它们会在应用程序终止时死亡)。一个常见的不朽对象是一个字符串文字,所以如果anObject是一个字符串,它可能会继续存在。

HTH