NSMutableDictionary VS NSMutableArray速度

时间:2015-02-16 14:02:23

标签: ios objective-c xcode nsmutablearray nsmutabledictionary

我正在使用从Parse.com下载的图像的缓存。图像用作UITableView单元格中UIButtons的背景图像。图像存储在NSMutableDictionary中。代码如下:

    PFUser *user =self.currentUser.friends[(int)indexPath.row*4+i];
    label.text=user.username;

    UIImage *cachedImage = self.images[@(indexPath.row*4+i)];
    if (cachedImage) {
        NSLog(@"Have image");
        [button setBackgroundImage:cachedImage forState:UIControlStateNormal];
    }

    else {
        NSLog(@"Download image");
        //download code

        PFFile *userImageFile = user[@"profilePic"];
        [userImageFile getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error) {
            if (!error) {
                UIImage *image = [UIImage imageWithData:imageData];
                self.images[@(indexPath.row*4+i)] = image;
                [button setBackgroundImage:image forState:UIControlStateNormal];

            }
        }];

    }

解决方案效果很好,但我意识到,如果我删除了一个朋友,我需要将它们从字典中删除,如果我这样做,则意味着我将不得不更改与UIImages相关的所有索引。我认为NSMutable数组会更好,所以我不必这样做,我可以根据需要插入和删除对象。这会影响应用程序的速度吗?数组的效率是否低于字典?

1 个答案:

答案 0 :(得分:4)

使用字典的全部理由是让属性可以访问项目,而不是数字索引。通过使用行索引,您将失去拥有字典的目的。

而不是[@(indexPath.row*4+i)]使用更稳定的密钥,例如username或图片的网址。

如果您想按数字(indexPath.row)进行索引,请使用NSMutableArray

请注意,只有当您有数千个项目时,才应该担心速度数组与字典。