【发布时间】:2015-12-28 18:56:08
【问题描述】:
我正在从 Parse.com 检索数据并尝试将包含此数据的图像添加到数组中。但是,某些代码没有任何明显的原因不会被执行。这是代码:
PFQuery *userQuery = [PFUser query];
[userQuery whereKey:@"objectId" containedIn:[self.event objectForKey:@"members"]];
[userQuery findObjectsInBackgroundWithBlock:^(NSArray *users, NSError *error) {
if (!error) {
self.membersArray = [NSMutableArray arrayWithArray:users];
[self.tableView reloadData];
for (PFUser *user in self.membersArray) {
[self.memberPhotosArray addObject:[NSNull null]];
NSInteger index = [self.memberPhotosArray indexOfObject:user];
PFFile *photoFile = [user objectForKey:@"profilePicture"];
[photoFile getDataInBackgroundWithBlock:^(NSData *result, NSError *error) {
if (!error) {
NSLog(@"Before creating image");
UIImage *image = [UIImage imageWithData:result];
[self.memberPhotosArray[index] addObject:image];
NSLog(@"After creating image");
[self.tableView reloadData];
}
}];
}
}
}];
第一个日志正在执行,此行之后的所有内容都没有被调用。有人可以解释原因并提供解决方案吗?
【问题讨论】:
-
你没有看到崩溃是吗?如果调用 [self.memberPhotosArray[index] addObject:image]; 时图像为 nil;它会爆炸。另外,我可能是错的,但你可能会在那个街区保留自我。
-
我不太擅长编码,但我使用的是 ARC,所以它不应该自己完成所有的保留/释放吗?
-
保留循环是对象相互保留的循环。如果任一对象被释放:对象 A 将不会被释放,因为对象 B 持有对它的引用。但是只要对象 A 有对它的引用,对象 B 就永远不会被释放。但是对象 A 永远不会被释放,因为对象 B 持有对它的引用。无止境
-
我想我理解了,但我怀疑我是否保留了它。但是,ARC 不是在为我做所有这些事情吗?
标签: ios objective-c arrays image parse-platform