利用运行时,给UIImageView写一个分类,交换里面的setImage的方法,可以重绘图片,提高内存的利用率(要是没有重绘图片,直接使用系统提供的setImag就会造成占用大量的内存问题)
来源:互联网 发布:linux系统jdk下载官网 编辑:程序博客网 时间:2024/05/16 09:38
//在类被加载到运行时的时候,就会执行
+ (void)load {
// 1.获取 UIImageView类的实例方法 `setImage:`
Method originalMethod =class_getInstanceMethod([selfclass],@selector(setImage:));
// 2.获取 UIImageView类的实例方法 `cz_setImage:`,本身定义在分类中
Method swizzledMethod =class_getInstanceMethod([selfclass],@selector(cz_setImage:));
// 3.交换方法 setImage和 cz_setImage,交换完成之后
// 1>调用 setImage相当于调用 cz_setImage
// 2>调用 cz_setImage相当于调用 setImage
method_exchangeImplementations(originalMethod, swizzledMethod);
}
/// 1.当在其他位置调用 `setImage`方法时,`自动`调用 cz_setImage: 方法
- (void)cz_setImage:(UIImage *)image {
NSLog(@"%s %@", __FUNCTION__, image);
// 1.根据 imageView的大小,重新调整 image的大小
//使用 `CG`重新生成一张和目标尺寸相同的图片
UIGraphicsBeginImageContextWithOptions(self.bounds.size,YES,0);
//绘制图像
[image drawInRect:self.bounds];
//取得结果
UIImage *result =UIGraphicsGetImageFromCurrentImageContext();
//关闭上下文
UIGraphicsEndImageContext();
//调用系统默认的 setImage方法
[selfcz_setImage:result];
}
+ (void)load {
// 1.获取 UIImageView类的实例方法 `setImage:`
Method originalMethod =class_getInstanceMethod([selfclass],@selector(setImage:));
// 2.获取 UIImageView类的实例方法 `cz_setImage:`,本身定义在分类中
Method swizzledMethod =class_getInstanceMethod([selfclass],@selector(cz_setImage:));
// 3.交换方法 setImage和 cz_setImage,交换完成之后
// 1>调用 setImage相当于调用 cz_setImage
// 2>调用 cz_setImage相当于调用 setImage
method_exchangeImplementations(originalMethod, swizzledMethod);
}
/// 1.当在其他位置调用 `setImage`方法时,`自动`调用 cz_setImage: 方法
- (void)cz_setImage:(UIImage *)image {
NSLog(@"%s %@", __FUNCTION__, image);
// 1.根据 imageView的大小,重新调整 image的大小
//使用 `CG`重新生成一张和目标尺寸相同的图片
UIGraphicsBeginImageContextWithOptions(self.bounds.size,YES,0);
//绘制图像
[image drawInRect:self.bounds];
//取得结果
UIImage *result =UIGraphicsGetImageFromCurrentImageContext();
//关闭上下文
UIGraphicsEndImageContext();
//调用系统默认的 setImage方法
[selfcz_setImage:result];
}
0 0
- 利用运行时,给UIImageView写一个分类,交换里面的setImage的方法,可以重绘图片,提高内存的利用率(要是没有重绘图片,直接使用系统提供的setImag就会造成占用大量的内存问题)
- 提高图形高效绘图机制的方法--旧事重拾
- 关于内存绘图的问题
- 简单的手指绘图并保存所绘图片【源码】
- STM32片外内存的使用
- UIImagePickerController选取图片后在判断图片方向,解决保存图片或重绘图片后旋转90度的方法
- 加载大图片内存会溢出的解决方法
- C++里面有没有获取单个进程的CPU利用率和内存利用率的函数啊?
- C++里面有没有获取单个进程的CPU利用率和内存利用率的函数啊?
- 内存设备绘图 BitBlt的使用
- 【ZT】一个程序占用内存的分类
- 一个程序占用内存的分类
- WINDOWS2008缓存设置工具,解决系统运行久了因系统缓存造成物理内存占用高僵死的问题
- 重绘图片 将图片保存到沙盒中
- 加载大图片内存溢出的解决办法
- Android 编程下图片的内存优化
- Android 编程下图片的内存优化
- android 下图片的内存优化
- java static 关键词介绍
- 整型数组逆置
- 小白到大白-远程控制电脑
- [PlantSimulation]实例:设备故障率对产出率的影响
- 免费的论文查重网站
- 利用运行时,给UIImageView写一个分类,交换里面的setImage的方法,可以重绘图片,提高内存的利用率(要是没有重绘图片,直接使用系统提供的setImag就会造成占用大量的内存问题)
- poj2376(贪心)
- 小白起步,警醒自己
- Python3实现逆波兰表达式计算
- 冒泡排序
- 表格如何嵌套表单,如何在用表格给表单排版
- WebSockets[翻译]
- 南阳oj _600花儿朵朵(树状数组插线问点+坐标离散化)
- 【MOOC】Python数据分析与展示-北京理工大学-【第三周】数据分析之概要