gpt4 book ai didi

ios - 我想我遇到了僵局,但不太明白为什么

转载 作者:行者123 更新时间:2023-11-28 18:06:03 26 4
gpt4 key购买 nike

我正在尝试像下面这样使用 GCD 一个接一个地放置图像

-(void)setUpImages {
NSArray *images = @[[UIImage imageNamed:@"blogger-icon.png"],
[UIImage imageNamed:@"gplus-icon.png"],
[UIImage imageNamed:@"facebok-icon.png"]
];
[images enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
dispatch_sync(dispatch_get_main_queue(), ^{
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(80, idx * ((UIImage*)obj).size.height + idx*30 + 10, ((UIImage*)obj).size.width, ((UIImage*)obj).size.height)];
NSLog(@"index is %@",NSStringFromCGRect(imageView.frame));

[imageView setImage:(UIImage*)obj];
[self.view.layer addSublayer:imageView.layer];
sleep(1);
});
}];

}

我正在使用 dispatch_sync 因为我希望它会等到它的 block 完成(第一张图像被放置在屏幕上)然后第二张图像将是,第三张也是如此。现在所有的事情都发生在主线程上。

但是,我似乎在中间陷入了僵局,我的逻辑在某些地方是错误的。

我需要帮助来理解这种情况。请帮忙。

最佳答案

来自 dispatch_sync 的文档:

Calling this function and targeting the current queue results in deadlock.


也就是说,我认为你有一个设计问题,你可以在不涉及 GCD 的情况下达到预期的结果。

由于您希望每 k 秒更新一次 UI,因此请避免使用 sleep(1) 并使用 performSelector:withObject:afterDelay: 延迟递归调用方法.

有点像

- (void)updateImageViewWithImageAtIndex:(NSNumber *)i {
UIImage * image = self.images[i.intValue];
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(80, idx * image.size.height + idx*30 + 10, image.size.width, image.size.height)];
NSLog(@"index is %@",NSStringFromCGRect(imageView.frame));
[imageView setImage:image];
[self.view.layer addSublayer:imageView.layer];

if (i < images.count - 1) {
[self performSelector:@selector(updateImageViewWithImageAtIndex:) withObject:@(i.intValue++) afterDelay:1];
}
}

- (void)setUpImages {
// Assuming you have declared images as a property
self.images = @[[UIImage imageNamed:@"blogger-icon.png"],
[UIImage imageNamed:@"gplus-icon.png"],
[UIImage imageNamed:@"facebok-icon.png"]
];
[self updateImageViewFromImages:images index:0];
}

关于ios - 我想我遇到了僵局,但不太明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18689521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com