iOS 開發之 為UIButton添加類別方法加載網絡圖片
使用GCD線程隊列實現
工程如下:
UIButton+WebCache.h
#import <UIKit/UIKit.h>
// 為Button添加類別方法
@interface UIButton (WebCache)
- (void)xr_setButtonImageWithUrl:(NSString *)urlStr;
@end
UIButton+WebCache.m
#import "UIButton+WebCache.h"
@implementation UIButton (WebCache)
- (void)xr_setButtonImageWithUrl:(NSString *)urlStr {
NSURL * url = [NSURL URLWithString:urlStr];
// 根據圖片的url下載圖片數據
dispatch_queue_t xrQueue = dispatch_queue_create("loadImage", NULL); // 創建GCD線程隊列
dispatch_async(xrQueue, ^{
// 異步下載圖片
UIImage * img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
// 主線程刷新UI
dispatch_async(dispatch_get_main_queue(), ^{
[self setImage:img forState:UIControlStateNormal];
});
});
}
@end
#import <UIKit/UIKit.h>
@interface XRViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *ImgBtn;
@end
#import "XRViewController.h"
#import "UIButton+WebCache.h"
@interface XRViewController ()
@end
@implementation XRViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)loadImg:(id)sender {
[self loadImage];
}
- (void)loadImage {
[_ImgBtn xr_setButtonImageWithUrl:@"http://img3.3lian.com/2014/c2/66/d/56.jpg"];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
效果圖: