希望我能解释清楚。 假设如下:
@interface ClassA : NSObject {
NSMutableArray firstArray;
NSArray secondArray;
}
#import "ClassA"
@interface ClassB : NSObject {
ClassA classAobject;
}
然后在程序的其他部分'Psuedo-code'访问字典键,如:
NSMutableArray* sample = [[NSMutableArray alloc] init];
for (keys in Data)
{
ClassA* aObj = [[ClassA alloc] initWith: objectForKey:@"KeyHere" andWith:@"Key2Here"];
ClassB* bObj = [[ClassB alloc] init];
[bObj setClassAObj: aObj];
[sample addObject: bObj];
}
Singleton* single = [Singleton single];
[single setArray: sample];
我的问题是在循环内创建的ClassA和ClassB对象以及将它们存储在循环外部的数组。我在这里泄漏记忆,不释放它们吗?如果我确实发布它们,我怎么能这样做,以至于我不会在我存储'sample'数组的单例中丢失对它们的引用?
如果重要,它所存储的Singleton数组将在类的“init”方法中进行分配和初始化。
答案 0 :(得分:1)
向数组添加对象会保留对象。所以你需要在添加它们之后释放它们(如果没有自动释放)。同样,您需要确保将实例变量数组(在Singleton中)的@properties设置为retain,以便在单例中设置时保留样本数组。然后你也需要发布样本。
此外,您的实例变量需要是指针:
@interface ClassA : NSObject {
NSMutableArray *firstArray;
NSArray *secondArray;
}
#import "ClassA"
@interface ClassB : NSObject {
ClassA *classAobject;
}
答案 1 :(得分:1)
NSMutableArray分别在添加和删除对象时对对象执行保留和释放。所以你得到一个保留为alloc,然后第二个保留添加。当数组被销毁时,它将释放一个。这使得保留计数为1。
您可以进行这些自动释放。我相信它可以提高性能,让内存一起发布,是推荐的方法。