码迷,mamicode.com
首页 > 其他好文 > 详细

初学runtime--实现篇01(Method Swizzle)

时间:2015-06-10 17:06:33      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

1. 实现IOS中的Swizzle效果:拦截系统方法
    * 具体实现:给Image添加分类UIImage (Extension)
    * 目的:通过拦截该imageNamed方法,可以一次性给项目中匹配各种屏幕存储的图片

@implementation UIImage (Extension)
 /**
 * 当某个类或者分类加载进内存时,会调用1次
 */
+ (void)load
{
    Method m1 = class_getClassMethod([UIImage class], @selector(imageNamed:));
    Method m2 = class_getClassMethod([UIImage class], @selector(test_imageNamed:));
    method_exchangeImplementations(m1, m2);
}
 
+ (UIImage *)test_imageNamed:(NSString *)name
{
    double version = [[UIDevice currentDevice].systemVersion doubleValue];
    // iso8系统的全部匹配_os8后缀的图片
    if (version >= 8.0) {  // 如果
        name = [name stringByAppendingString:@"_os8"];
    }
    return [UIImage test_imageNamed:name];
}
 
2.在控制器中
- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.imageView.image = [UIImage imageNamed:@"test"];
    self.imageView2.image = [UIImage imageNamed:@"test_os8"];
}

    

初学runtime--实现篇01(Method Swizzle)

标签:

原文地址:http://www.cnblogs.com/guozhong/p/4566488.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!