我从Parse服务器获取图像,但是当我收到它并将其存储在NSMutableDictionary
时,我检查它时就无法停留在那里。
NSString* messageSenderId = [receivedMessage objectForKey:@"Sender Id"];
NSLog(@"messageSenderId = %@", messageSenderId);
if([self.avatarDictionary objectForKey:messageSenderId] == nil) { // avatar image for sender not yet stored
PFQuery* userQuery = [PFUser query];
[userQuery whereKey:@"objectId" equalTo:messageSenderId];
PFUser* messageSender = (PFUser *)[[messageSenderQuery findObjects] firstObject];
PFFile *avatarImage = messageSender[@"profilePictureSmall"];
[avatarImage getDataInBackgroundWithBlock:^(NSData * _Nullable data, NSError * _Nullable error) {
UIImage* storedImage = [UIImage imageWithData:data];
[self.avatarDictionary setObject:storedImage forKey:messageSender.objectId];
NSLog(@"objectForKey: %@", [self.avatarDictionary objectForKey:messageSender.objectId]);
[self.collectionView reloadData];
}];
}
当我检查storedImage
变量时,我可以看到它不是空的。但是,NSLog
显示我将其存储在内部后没有该对象的对象。
答案 0 :(得分:2)
当然可以,但我不会
您的问题可能是因为您没有初始化可变字典
图像占用大量内存,如果您要存储大量图像,系统可能会杀死您的应用程序
一种更好的方法是在本地保存图像并在可变字典中存储它们的路径
或者,如果您仍想将图像存储在RAM中,则可以使用NSCache。 NSCache基本上是一个可变字典,但它通过自动驱逐资源来实现更好的内存管理,并且它是线程安全的。