IOS中如何異步加載圖片(二)異步加載圖片

異步加載圖片的原理就是 當網絡請求下來的數據中有圖片的數據,就把圖片的數據提出來 讓它自己去通過ImageDownload下載 等下載好了,在把圖片傳給View去顯示。
話不多說 上代碼

第一步 :在定義的Model類中 重新聲明一個屬性 用來顯示圖片的,在這之前 一定要引入ImageDownload的頭文件哦!!!

@property (nonatomic, retain) UIImage *pictureimage;// 用來顯示圖片的屬性

第二步:因爲是在MRC下 所以要重寫dealloc方法 別忘了!!!

- (void)dealloc
{
    [_movieId release];
    [_movieName release];
    [_pic_url release];
    // 下面是需要release的方法 
    [_pictureimage release];

    [super dealloc];
}

第三步 當外界執行相應的KVC方法(setValuesForKeysWithDictionary)的時候 內部會執行下面的方法 所以我們要重寫這個方法 來進行圖片異步加載

- (void)setValue:(id)value forKey:(NSString *)key
{
    [super setValue:value forKey:key];

    if ([key isEqualToString:@"pic_url"]) {
    // 使用ImageDownload裏面的初始化方法
        ImageDownload *imagedownload = [ImageDownload imageDownloadWithURLStr:value];

        // 這裏面的Block方法是要等圖片加載完成後執行ImageDownload裏面的方法後 纔會執行
        __block MovieData *text = self;// 雙下劃線定義self 是爲了防止循環引用

        imagedownload.successBlock = ^(ImageDownload *imageDownload, UIImage *image){
            // 將下載好的圖片 賦值給創建的屬性
            text.pictureimage = image;
        };

        imagedownload.errorBlock = ^(ImageDownload *imageDownload,NSError *error){
            NSLog(@"error = %@",[error localizedDescription]);
        };
    }
}

第四步 回到ImageDownload.m文件中 圖片數據下載完成後 會執行下面的方法

// 將接收到的數據進行拼接
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    // 拼接數據
    [self.receiveData appendData:data];
}


// 數據下載成功後 調用外界成功的Block方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    UIImage *image = [UIImage imageWithData:self.receiveData];
    self.successBlock(self,image);
}
// 下載失敗後,同樣調用外界失敗的Block方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    self.errorBlock(self,error);
}

第五步:在View中展示下載好的圖片

- (void)configuerDataWithActivity:(MovieData *)movieDate
{
    self.namelabel.text = movieDate.movieName;

    // 異步加載的方式加載圖片
    // 將下載好的圖片給View中的Label顯示出來
    self.imagelabel.image = movieDate.pictureimage;
}

這樣 就可以實現異步圖片的加載了 但是還有一個問題 就是實際情況中 如果網速比較慢的話 下載好的圖片不能顯示出來 所以在還不是最完美的版本 ,需要引入KVO觀察者
敬請期待。。。

發佈了23 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章