Iphone 从UIButtons上的服务器加载多个图像??

Iphone 从UIButtons上的服务器加载多个图像??,iphone,ios,uibutton,Iphone,Ios,Uibutton,我正试图上传8-10个缩略图在UIButton上。图像通过链接直接加载到我的服务器,例如www.abc.com/fire.png。我已将这些UIButtons放置在滚动视图中。下面的代码是我如何实现它的。但每当调用此方法时,我的应用程序都会挂断,因为我猜图像加载到按钮上需要时间。如何阻止我的应用程序被卡住几秒钟 - (void)loadSCRView { [self.view addSubview:scrollView]; for (i = 0; i < [myEngine.logoUr

我正试图上传8-10个缩略图在UIButton上。图像通过链接直接加载到我的服务器,例如www.abc.com/fire.png。我已将这些UIButtons放置在滚动视图中。下面的代码是我如何实现它的。但每当调用此方法时,我的应用程序都会挂断,因为我猜图像加载到按钮上需要时间。如何阻止我的应用程序被卡住几秒钟

- (void)loadSCRView
{
[self.view addSubview:scrollView];

for (i = 0; i < [myEngine.logoUrlArr count]; i++)
{
    NSString *imageName = [NSString stringWithFormat:@"%@",[myEngine.logoUrlArr objectAtIndex:i]];
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL: [NSURL URLWithString:imageName] options:NSDataReadingUncached error:nil]];

    UIButton *btn = [[UIButton alloc]init];
    [btn setImage:image forState:UIControlStateNormal];

    [btn setFrame:CGRectMake(x, 4, 57, 57)];
    x=x+ 70.00;

    btn.tag = i;

    [scrollView addSubview:btn];
    [btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchDown];

    UILabel *label = [[UILabel alloc]init];
    label.text = [myEngine.nameArr objectAtIndex:i];
    [label setFont:[UIFont fontWithName:@"Helvetica" size:12]];
    [label setTextColor:[UIColor whiteColor]];
    [label setBackgroundColor:[UIColor clearColor]];
    [label setFrame:CGRectMake(btn.frame.origin.x , 59, 70, 20)];
    //[label setFrame:CGRectMake(100 , 59, 70, 20)];
    y=y+ 100.00;
    [scrollView addSubview:label];
    [btn release];
    [label release];
}
-(无效)加载视图
{
[self.view addSubview:scrollView];
对于(i=0;i<[myEngine.logoUrlArr count];i++)
{
NSString*imageName=[NSString stringWithFormat:@“%@,[myEngine.logoUrlArr objectAtIndex:i]];
UIImage*image=[UIImage imageWithData:[NSData DATA WITHCONTENTSOFURL:[NSURL URLWithString:imageName]选项:NSDATAREADINGUCACHED错误:nil]];
UIButton*btn=[[UIButton alloc]init];
[btn setImage:image for状态:UIControlStateNormal];
[btn设置帧:CGRectMake(x,4,57,57)];
x=x+70.00;
btn.tag=i;
[滚动视图添加子视图:btn];
[btn addTarget:self action:@selector(单击:)forControlEvents:UIControlEventTouchDown];
UILabel*label=[[UILabel alloc]init];
label.text=[myEngine.nameArr objectAtIndex:i];
[label setFont:[UIFont fontWithName:@“Helvetica”大小:12];
[label setTextColor:[UIColor whiteColor]];
[标签setBackgroundColor:[UIColor clearColor]];
[标签setFrame:CGRectMake(btn.frame.origin.x,59,70,20)];
//[标签设置框:CGRectMake(100,59,70,20)];
y=y+100.00;
[滚动视图添加子视图:标签];
[btn释放];
[标签发布];
}

为了避免冻结,您必须使用NSOperationQueue。这是一个很好且合适的示例…

您可以使用线程,以便在后台线程中下载图像并将其缓存。这样下次您的性能会很好。

您应该尝试获取这些图像(最好在后台线程中)在显示滚动视图之前。将它们保存在磁盘上,并在滚动视图中使用。网络操作通常不会太快,因此不会出现延迟

嗯,


Akshay

我面临着同样的问题,那么哪一个是解决这类问题的最佳方案..延迟加载还是NSOperationQueue?任何人都能给我一些建议吗。