【问题标题】:Multi-dimensional NSArray object多维 NSArray 对象
【发布时间】:2010-04-07 23:28:01
【问题描述】:

有没有一种方法可以创建二维 NSArray 而无需以原始格式 aFloatArray[][] 嵌套数组。

谢谢。

【问题讨论】:

  • 你需要完成什么?也许还有其他方法更适合您正在解决的问题。

标签: objective-c multidimensional-array nsarray


【解决方案1】:

很遗憾没有。创建多维 NSArray:

NSArray *multiArray = [NSArray arrayWithObjects:
    [NSMutableArray array],
    [NSMutableArray array],
    [NSMutableArray array],
    [NSMutableArray array], nil];

// Add a value
[[multiArray objectAtIndex:1] addObject:@"foo"];

// get the value
NSString *value = [[multiArray objectAtIndex:1] objectAtIndex:0];

但是,您可以在 Objective-C 中使用 C 代码(因为它是 C 的严格超集),如果它符合您的需要,您可以按照您的建议声明数组。

【讨论】:

  • 如果您没有使用垃圾回收,那么您将泄漏multiArray 中的每个数组。要修复,请改用[NSMutableArray array]
  • 真的吗?我的理解是 [NSMutableArray 数组] 返回了一个自动释放的 NSMutableArray,而它又会被添加到其中的 NSArray 保留!我肯定会查一下,因为如果你是正确的,我有很多代码要通过大声笑
  • 是的。关键是自动释放的对象由它添加到的数组保留的。当父数组被释放时,它的内容也会被释放。如果将[NSMutableArray new] 添加到数组中,则其保留计数变为2。当父数组被释放时,其每个子数组的保留计数仍为1
  • 尽量避免考虑保留计数。这通常会产生误导。只考虑对象的所有权。由于您使用 new 获得了四个数组中的每一个,因此您有责任释放它们。你不这样做。可能的解决方案:将 [NSMutableArray new] 更改为 [[NSMutableArray new] autorelease] 或 [NSMutableArray array] 或使用垃圾回收(不是 iPhone 上的选项)。
  • 糟糕,我现在意识到我误读了 Dave 的评论。无论如何,感谢您的回答:) 我很困惑,因为我不知道 NSObject 有一个“新”类方法,我认为它类似于 NSArray 的“数组”方法。
【解决方案2】:

你可以这样做:

NSArray *array = @[@[@"0:0", @"0:1"],
                   @[@"1:0", @"1:1"]];

NSString *value = array[1][0];

我认为这比“objectAtIndex”的东西要短得多。

但请注意,您使用的是 Apple LLVM 编译器版本 >= 4.0

【讨论】:

  • 这绝对是现代方法。
【解决方案3】:

在 Collection 或 TableView cellForRowAtIndexPath 中的多维数组中插入对象:

NSString *sectionRow = [NSString stringWithFormat:@"%d:%d", indexPath.section, indexPath.row];                
[dictionary setValue:[UIImage imageWithData:imageData] forKey:sectionRow];

从 Collection 或 TableView cellForRowAtIndexPath 中的多维数组中检索对象:

NSString *sectionRow = [NSString stringWithFormat:@"%d:%d", indexPath.section, indexPath.row];    
UIImage *cellImage = [dictionary valueForKey:sectionRow];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 2020-02-23
    • 2015-12-30
    相关资源
    最近更新 更多