我正在使用从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数组会更好,所以我不必这样做,我可以根据需要插入和删除对象。这会影响应用程序的速度吗?数组的效率是否低于字典?
答案 0 :(得分:4)
使用字典的全部理由是让属性可以访问项目,而不是数字索引。通过使用行索引,您将失去拥有字典的目的。
而不是[@(indexPath.row*4+i)]
使用更稳定的密钥,例如username
或图片的网址。
如果您想按数字(indexPath.row
)进行索引,请使用NSMutableArray
。
请注意,只有当您有数千个项目时,才应该担心速度数组与字典。