我对目标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。
任何帮助都是值得的 感谢
答案 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.
如果现在发布了a
或c
,则该对象会收到dealloc
条消息。在此方法中,必须释放对象的所有ivars
。因此,如果a
和c
具有包含某些对象的数组AClassArray
的保留属性,则AClassArray
必须在{{1}中发送release
消息} dealloc
和a
。 c
然后向其包含的所有对象发送AClassArray
消息。
可以找到更详细的说明here 但正如我之前在评论中所说,所有这些都是通过使用ARC自动处理的。