我的UITableView中有若干UIButton,圖片存放于本地硬盤,讀取到內存后放進UIButton展示。子線程負責從文件讀入圖片到內存,主線程用setImage:forState:展示。由于setImage:forState:耗時較長且在主線程,導致Table拖動起來較卡。代碼如下(UIButton上的擴展):-(void)asyncLoadImageAtPath:(NSString*)fullPathforState:(UIControlState)state{dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{UIImage*image=[[UIImagealloc]initWithContentsOfFile:fullPath];dispatch_async(dispatch_get_main_queue(),^{[selfsetImage:imageforState:state];});});}后將setImage:forState:移入子線程,卡是不卡了,但是setImage:forState線程不安全,setImage:forState調用兩秒后才會被顯示。代碼改為:-(void)asyncLoadImageAtPath:(NSString*)fullPathforState:(UIControlState)state{dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{UIImage*image=[[UIImagealloc]initWithContentsOfFile:fullPath];dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0),^{[selfsetImage:imageforState:state];});});}QQ電影票中存于本地的大圖拖起來不卡,且看起來是線程安全的。不知是怎么做的?解決:最后讀圖重畫成小尺寸一個線程,渲染一個線程,性能和自帶的Photos差不多
UITableView中大圖片加載時卡頓問題
SMILET
2019-03-29 11:00:18
