项目中用sd来显示图片
结果有些图片的url中有汉字或者π这种符号,结果sd无法识别这种url,图片就加载不出
之前说了可以先给url转码后使用,但是项目中太多地方使用sd,不可能一个个去修改,所以就想到写一个UIImageView的分类用runtime去交换方法,在方法中进行转码
结果做出来后发现该显示不出还是显示不出,打断点测试才发现是sd根本就不接收这样的url,直接为nil
那就只好写个NSURL的分类了,然后解决了,总算有机会实践runtime在项目中了。。
#import "NSURL+NSURL_SDImageURLTranscoding.h"
#import <objc/message.h>
@implementation NSURL (NSURL_SDImageURLTranscoding)
+ (void)load{
staticdispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Method superMethod =class_getClassMethod([NSURLclass], @selector(URLWithString:));
Method transCodingMethod =class_getClassMethod([NSURLclass], @selector(transCodingURL:));
method_exchangeImplementations(superMethod, transCodingMethod);
});
}
+ (NSURL *)transCodingURL:(NSString *)urlStr{
urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
return [selftransCodingURL:urlStr];
}
runtime还不是很懂,代码可能写得有坑,还请多指教