带数组的数组,内存问题

时间:2012-02-08 16:30:34

标签: objective-c

如何在没有内存泄漏的情况下创建以下数组:

它应该是一个包含数组的数组

 arr = [[NSMutableArray alloc] initWithObjects:
                [[NSMutableArray alloc] init], 
                [[NSMutableArray alloc] init],    
                [[NSMutableArray alloc] init],
                [[NSMutableArray alloc] init],     
                [[NSMutableArray alloc] init], 
                [[NSMutableArray alloc] init],     
                [[NSMutableArray alloc] init], nil];

3 个答案:

答案 0 :(得分:3)

使用[NSMutableArray array]代替,这会创建一个您不必担心的自动释放对象:

arr = [NSMutableArray arrayWithObjects:
            [NSMutableArray array], 
            [NSMutableArray array],    
            [NSMutableArray array],
            [NSMutableArray array],     
            [NSMutableArray array], 
            [NSMutableArray array],     
            [NSMutableArray array], nil];

请注意,如果要保留,则必须保留/释放arr。 如果您真正想要的只是数组数组,我有一个名为RJGrid的类,它将为您执行此操作,并且比多个NSMutableArrays更快(链接列表查找速度慢)。

您可以在我的保管箱中下载课程here。它使用ARC,但如果你想让我这样做,它很简单就可以转换为引用计数环境。

答案 1 :(得分:1)

如果您使用ARC,则无需执行任何操作。如果您不使用ARC,那么您可以自动释放阵列:

arr = [[NSMutableArray alloc] initWithObjects:
                [[[NSMutableArray alloc] init] autorelease], 
                [[[NSMutableArray alloc] init] autorelease],    
                [[[NSMutableArray alloc] init] autorelease],
                [[[NSMutableArray alloc] init] autorelease],     
                [[[NSMutableArray alloc] init] autorelease], 
                [[[NSMutableArray alloc] init] autorelease],     
                [[[NSMutableArray alloc] init] autorelease], nil];

答案 2 :(得分:1)

使用自动释放内存池并在完成arr变量后释放池。

http://www.alphero.com/mobile-development/understanding-objective-c-autorelease-memory-management/