单例的创建就是创建出一个方法,在整个工程是唯一的,且只被执行一次,下面就是通过GCD来创建一个单例,代码如下:
<span style="font-size:14px;">// 单例的创建
+ (id)sharedImage{
static dispatch_once_t once;
static id instance;
dispatch_once(&once, ^{
instance = [self new];
});
return instance;
}</span>
通过GCD来创建单例,可以保证其线程的安全性,也更好的兼容ARC。
另外,我们在使用单例的时候,通常有这样三个作用:
1.封装一个共享的资源。
2.提供一个固定的实例化创建方法。
3.提供一个标准的实例化访问接口。
下面说一下怎么生成缩略图,下面的方法生成的缩略图,会保持原来图片的比例关系,从而避免图片显示不全的问题出现,代码如下:
- (UIImage *)thumbnailWithImageWithoutScale:(UIImage *)image size:(CGSize)asize{
UIImage *newimage;
if (!image) {
newimage = nil;
}else{
CGSize oldsize = image.size;
CGRect rect;
if (asize.width/asize.height > oldsize.width/oldsize.height) {
// asize的缩放比例>原来图片的缩放比例时 此时需要调整宽度 而高度不变
rect.size.width = asize.height*oldsize.width/oldsize.height;
rect.size.height = asize.height;
rect.origin.x = (asize.width - rect.size.width)/2;
rect.origin.y = 0;
}else{
// asize的缩放比例<原来图片的缩放比例时 此时需要调整高度 而宽度不变
rect.size.width = asize.width;
rect.size.height = asize.width*oldsize.height/oldsize.width;
rect.origin.x = 0;
rect.origin.y = (asize.height - rect.size.height)/2;
}
UIGraphicsBeginImageContext(asize);
// 获取当前的画布
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);
UIRectFill(CGRectMake(0, 0, asize.width, asize.height));//clear background 也就是画布的背景色
// 开始重新绘制
[image drawInRect:rect];
// 从当前画布获得图像
newimage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
return newimage;
}