Objective c Obj-C:正确释放循环中分配的对象

Objective c Obj-C:正确释放循环中分配的对象,objective-c,memory-management,memory-leaks,release-management,retain,Objective C,Memory Management,Memory Leaks,Release Management,Retain,希望我能解释清楚。 假设如下: @interface ClassA : NSObject { NSMutableArray firstArray; NSArray secondArray; } #import "ClassA" @interface ClassB : NSObject { ClassA classAobject; } 然后在程序“Psuedo code”的其他部分中访问字典键,如: NSMutableArray* sample = [[NSMutableAr

希望我能解释清楚。 假设如下:

@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”数组的单例中不丢失对它们的引用呢


如果重要的话,存储它的单例数组将在类的“init”方法中分配和初始化。

向数组添加对象将保留这些对象。因此,您需要在添加它们之后释放它们(如果没有自动释放)。类似地,您需要确保实例变量数组的@properties(在Singleton中)设置为retain,以便在Singleton中设置时保留样例数组。然后您还需要发布示例

此外,实例变量需要是指针:

@interface ClassA : NSObject {
   NSMutableArray *firstArray;
   NSArray *secondArray;
}

#import "ClassA"
@interface ClassB : NSObject {
   ClassA *classAobject;
}

NSMutableArray在分别添加和删除对象时对其执行保留和释放。因此,alloc得到一个retain,add得到第二个retain。当阵列被销毁时,它将释放一个。这将使您的保留计数为1


你可以让这些自动释放。我相信将内存一起释放可以提高性能,这是推荐的方法。

请不要针对这样的问题发布非编译代码。张贴您正在使用的实际代码。基本上不可能判断内存管理是否正确,因为这段代码部分是荒谬的。它也不是伪代码;伪代码通常是语言和框架不可知的,并且会忽略诸如
alloc
/
init
之类的内容。