关于表格优化的小知识点

       在开发中图片样式会遇到圆型,此时的做法有两种第一种直接调用系统的imageView的layer属性:imageView.layer.cornerRadius 设置它的值等于imageView的一半.但是这样做放在表格中十分消耗性能,所以不考虑,另外一种方法那就是绘制图片,代码如下:

-(UIImage *)dd_imageWithSize:(CGSize)size fillColor:(UIColor *)fillColor{

//开启上下文

UIGraphicsBeginImageContextWithOptions(size, YES, 0);

CGRect rect = CGRectMake(0, 0, size.width, size.height);

[fillColor setFill];

UIRectFill(rect);

//贝塞尔曲线

UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:rect];

[path addClip];

//绘制图像

[self drawInRect:rect];

//取得结果

UIImage *result = UIGraphicsGetImageFromCurrentImageContext();

//关闭上下文

UIGraphicsEndPDFContext();

//返回结果

return result ;

}

通过模拟器的混合模式测试,图片性能OK,但是我们还需要考虑到CPU运行时间,通过在方法里面的第一步和最后一步调用方法CACurrentMediaTime(),得到方法的前后运行时间

关于表格优化的小知识点_第1张图片


我们可以算出时间为0.026178秒,此时我考虑优化,用多线程异步回调的方法代码如下:

-(void)dd_imageWithSize:(CGSize)size fillColor:(UIColor *)fillColor completeBlock:(void(^)(UIImage *))completeBlock{

NSTimeInterval start = CACurrentMediaTime();

dispatch_async(dispatch_get_global_queue(0, 0), ^{

//开启上下文

UIGraphicsBeginImageContextWithOptions(size, YES, 0);

CGRect rect = CGRectMake(0, 0, size.width, size.height);

[fillColor setFill];

UIRectFill(rect);

//贝塞尔曲线

UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:rect];

[path addClip];

//绘制图像

[self drawInRect:rect];

//取得结果

UIImage *result = UIGraphicsGetImageFromCurrentImageContext();

//关闭上下文

UIGraphicsEndPDFContext();

//回到主线程

dispatch_async(dispatch_get_main_queue(), ^{

if (completeBlock !=nil) {

completeBlock(result);

}

});

});

NSLog(@"%f",CACurrentMediaTime()-start);

}

通过异步全局,完成图片处理代码,再把图片处理结果的Block回调,放在异步主队列中.通过测试方法执行的秒数为0.000045秒.

关于表格优化的小知识点_第2张图片

你可能感兴趣的:(关于表格优化的小知识点)