目标C中的内存管理特别是在使用数组,对象,字典等时

时间:2014-06-25 09:33:47

标签: memory-management nsmutablearray

我对目标c中的内存管理非常困惑。我知道当我们分配一个对象时保留计数会增加,并且当我们调用release方法时该对象被释放。如果保留计数变为零,则只有内存空闲。

但我不确定我们如何在编程中使用它,特别是在数组,字典,NSString对象和NSObject对象等的内存管理时。任何人都可以帮我一些例子。 我有一个问题。 我创建了一个类型为AClass的对象;

          AClass * a = [[AClass alloc]init];

我将该对象添加到两个数组中,如

        [Arry1 addObject:a]; 
        [Arry2 addObject:a];

我正在使用副本分配给另一个对象。

        AClass * c = [a copy];

如何在没有任何内存泄漏的情况下释放c。 假设AClass包含一些像AClassArray这样的对象的arry。 当我发布AClass对象a或c时,我如何释放这些AClassArray。

任何帮助都是值得的 感谢

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题,但试试看:

AClass * a = [[AClass alloc]init]; // a has now a retain count of 1.  
[a addObject:AClassArray]; // Adding an object to an array increases its retain count. Thus a has still a retain count of 1, and the retain count of AClassArray is increased by 1.  
[Arry1 addObject:a]; // a has now a retain count of 2.  
[Arry2 addObject:a]; // a has now a retain count of 3.

AClass * c = [a copy]; // copy creates a new object. Thus c has a retain count of 1, and a still has a retain count of 3.

如果现在发布了ac,则该对象会收到dealloc条消息。在此方法中,必须释放对象的所有ivars。因此,如果ac具有包含某些对象的数组AClassArray的保留属性,则AClassArray必须在{{1}中发送release消息} deallocac然后向其包含的所有对象发送AClassArray消息。

可以找到更详细的说明here 但正如我之前在评论中所说,所有这些都是通过使用ARC自动处理的。