【问题标题】:picked image saving causes slowing拾取的图像保存会导致速度变慢
【发布时间】:2013-04-03 06:27:49
【问题描述】:

我通过以下代码从 iphone 中选择了一张图片:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info  {
    [self dismissViewControllerAnimated:YES completion:nil];

    UIImage *pickedImg = (UIImage*)[info objectForKey:UIImagePickerControllerOriginalImage];

    [self.photoBtn setBackgroundImage:pickedImg forState:UIControlStateNormal];
    [[self.tblView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]].contentView addSubview:photoBtn];
    data.img = pickedImg;
    //data.img = nil;
    [self.tblView reloadData];
}

然后通过这段代码保存:

-(void)saveProfile  {

    data.firstName = firstName.text;
    data.lastName = lastName.text;
    data.phoneMob = phoneMob.text;
    data.phoneHome = phoneHome.text;
    data.emailOffice = emailOff.text;
    data.emailPersonal = emailPers.text;
    data.address = address.text;
    data.company = company.text;
    data.website = website.text;
    //NSLog(data.img);

    NSMutableData *pData = [[NSMutableData alloc]init];

    NSString *path = [common saveFilePath];

    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:pData];
    [data encodeWithCoder:archiver];
    [archiver finishEncoding];
    [pData writeToFile:path atomically:YES];

    [self.navigationController popViewControllerAnimated:YES];
}

但是当我尝试保存配置文件时,它会导致速度变慢。 然后我在第一种方法中尝试了data.img = nil。现在它没有缓慢和没有图像保存。如何用图片快速保存?

【问题讨论】:

    标签: iphone ios objective-c uiimagepickercontroller nscoding


    【解决方案1】:

    您的主线程已被保存操作锁定。将用于将图像写入文件的代码放在它自己的线程中:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
        NSMutableData *pData = [[NSMutableData alloc]init];
        NSString *path = [common saveFilePath];
    
        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:pData];
        [data encodeWithCoder:archiver];
        [archiver finishEncoding];
        [pData writeToFile:path atomically:YES];
    });
    

    这将允许主线程在文件被写出时继续。

    【讨论】:

    • 谢谢。但它与 -[CALayer phoneMob] 崩溃:发送到实例的无法识别的选择器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 2023-03-30
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多