将多个图像添加到哪种阵列的最佳方法?

时间:2011-09-04 18:14:23

标签: iphone ios ipad uiimageview

我正在为字母表中的所有字母创建可拖动的字母拼贴。如果一个单词需要多个相同的字母,我会在每个字母中创建5个字母。

我在我的MainViewControllers ViewDidLoad:方法中以编程方式创建每个UIImageView。

- (void)ViewDidLoad:
{
        for (int i = 1; i <= 5; i++)
    {
        letterA = [[LetterTiles alloc] initWithFrame:CGRectMake(39, 104, 70, 70)];
        [letterA setImage:[UIImage imageNamed:@"a.png"]];
        letterA.tag = i;
        [letterA setUserInteractionEnabled:YES];
        [self.view addSubview:letterA];
        [letterA release];

    for (int i = 1; i <= 5; i++)
    {
        letterB = [[LetterTiles alloc] initWithFrame:CGRectMake(112, 104, 70, 70)];
        [letterB setImage:[UIImage imageNamed:@"b.png"]];
        letterB.tag = i;
        [letterB setUserInteractionEnabled:YES];
        [self.view addSubview:letterB];
        [letterB release];
    }

    for (int i = 1; i <= 5; i++)
    {
        letterC = [[LetterTiles alloc] initWithFrame:CGRectMake(185, 104, 70, 70)];
        [letterC setImage:[UIImage imageNamed:@"c.png"]];
        letterC.tag = i;
        [letterC setUserInteractionEnabled:YES];
        [self.view addSubview:letterC];
        [letterC release];
    }   
}

我有几个问题:

  1. 我应该为每个字母创建一个数组,还是为所有字母创建一个数组?

  2. 我应该使用什么样的阵列? NSMutableArray / NSArray或NSMutableDictionary / NSDictionary? - 我一直试图找出如何将所有这些字母添加到所有上述数组类型,然后根据他们的字母和标签检索它们,但不能为我的生活搞清楚。有人愿意用代码中的一个或两个字母向我展示一个例子吗?

  3. 有没有比我在这里展示和询问的更好的方法呢?

1 个答案:

答案 0 :(得分:2)

问题1

对所有字母使用单个NSArray更好,它会减少您必须处理的变量数量。有这样的事情:

NSArray *arrayA;
NSArray *arrayB;
NSArray *arrayC;
...
NSArray *arrayZ;

只需要很多代码就可以在单个数据结构中轻松访问,更不用说,如果你计划添加数字,puncutation等,更容易更新。

问题2

Mutable意味着它可以更新,所以重要的问题,你的Array / Dictionary应该在运行时更新吗?如果答案是否定的,那么非可变数组可能会更好。另一方面,你必须自动用很多东西填充数组,所以拥有一个可变版本可能会让你拥有更清晰的代码(而不是[[NSArray alloc] initWithObjects:[UIImage imageNamed:@"A"], ...])。

所以我会选择可变版本,只是为了更清晰的代码。

问题3

这是个人选择,但我不喜欢在静态类型语言中嵌套数据结构(在python中这样做是一种幸福,例如myDictArray["key"][1])。我会使用组成键的Mutable Dictionary来存储相关数据:

NSString *key = [NSString stringWithFormat:"%c%d", letter, number]; // For example "J3" is the 3rd J letter.

另一方面,我不使用图像,而是使用大方形UILabel,以节省内存(和心理健全,处理那么多图像,呃),并选择iOS使用的许多字体之一( Here's a complete list)。

有了这个,生成一切,需要两个嵌套的fors,一个迭代每个字母,然后每5个重复一个,然后创建标签并将其扔到字典中(我会编写代码,但我'我不在Mac上。)