freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

黑馬程序員:ios面試寶典之第三方框架共5篇-資料下載頁

2024-11-16 23:33本頁面
  

【正文】 同上)完全顯示出來的時候。cell11加入到visiableCells,cell1移出 visiableCells,cell1加入到reusableTableCells。,因為reusableTableCells中已 經(jīng)有值,所以,當需要顯示新的cell, cellForRowAtIndexPath再次被調(diào)用的時 候,tableView dequeueReusableCellWithIdentifier:CellIdentifier,返回cell1。cell1加入到visiableCells,cell1 移出reusableTableCells。cell2移出 visiableCells,cell2加入到reusableTableCells。之后再需要顯示的Cell就可 以正常重用了? 滑動的時候有種卡的感覺是為什么?怎么解決?然而在使用第三方應(yīng)用時,卻經(jīng)常遇到性能上的問題,普遍表現(xiàn)在滾動時比較卡,特別是table cell中包含圖片的情況時。實際上針對性地優(yōu)化一下就可以解決tableView滑動的時候卡頓的問題, 在iOS應(yīng)用中,UITableView應(yīng)該是使用率最高的視圖之一了。iPod、時鐘、日歷、備忘錄、Mail、天氣、照片、電話、短信、Safari、App Store、iTunes、Game Center?幾乎所有自帶的應(yīng)用中都能看到它的身影,可見它的重要性。然而在使用第三方應(yīng)用時,卻經(jīng)常遇到性能上的問題,普遍表現(xiàn)在滾動時比較卡,特別是table cell中包含圖片的情況時。實際上只要針對性地優(yōu)化一下: 1同一時間其實只需要存在一屏幕的cell對象即可,不需要為每一行創(chuàng)建一個cell。UITableView是UIScrollView的子類,因此它可以自動響應(yīng)滾動事件(一般為上下滾動)。它內(nèi)部包含0到多個UITableViewCell對象,每個table cell展示各自的內(nèi)容。當新cell需要被顯示時,就會調(diào)用tableView:cellForRowAtIndexPath:方法來獲取或創(chuàng)建一個 cell;而不可視時,它又會被釋放。由此可見,同一時間其實只需要存在一屏幕的cell對象即可,不需要為每一行創(chuàng)建一個cell。此 外,UITableView還可以分為多個sections,每個區(qū)段都可以有自己的head、foot和cells。而在定位一個cell時,就需要2 個字段了:在哪個section,以及在這個section的第幾行。這在iOS SDK中是用NSIndexPath來表述的,UIKit為其添加了indexPathForRow:inSection:這個創(chuàng)建方法。其他諸如編輯之類的就不提了,因為和本文無關(guān)。介紹完原理,接下來就開始優(yōu)化吧。使用不透明視圖。不透明的視圖可以極大地提高渲染的速度。因此如非必要,可以將table cell及其子視圖的opaque屬性設(shè)為YES(默認值)。其中的特例包括背景色,它的alpha值應(yīng)該為1(例如不要使用clearColor);圖像的alpha值也應(yīng)該為1,或者在畫圖時設(shè)為不透明。不要重復(fù)創(chuàng)建不必要的table cell。前面說了,UITableView只需要一屏幕的UITableViewCell對象即可。因此在cell不可見時,可以將其緩存起來,而在需要時繼續(xù)使用它即可。而UITableView也提供了這種機制,只需要簡單地設(shè)置一個identifier即可:static NSString *CellIdentifier = @“xxx”。UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]。if(cell == nil){ cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]。} 值得一提的是,cell被重用時,它內(nèi)部繪制的內(nèi)容并不會被自動清除,因此你可能需要調(diào)用setNeedsDisplayInRect:或setNeedsDisplay方法。此 外,在添加table cell的時候,如果不需要動畫效果,最好不要使用insertRowsAtIndexPaths:withRowAnimation:方法,而是直接調(diào) 用reloadData方法。因為前者會對所有indexPaths調(diào)用tableView:cellForRowAtIndexPath:方法,即便該 cell并不需要顯示(不知道是不是bug),這就可能創(chuàng)建大量多余的cell??闭`:只是在模擬器上測試如此,真機調(diào)試時沒有這種bug。減少視圖的數(shù)目。UITableViewCell包含了textLabel、detailTextLabel和imageView等view,而你還可以自定義一些視圖放在它的contentView里。然而view是很大的對象,創(chuàng)建它會消耗較多資源,并且也影響渲染的性能。如果你的table cell包含圖片,且數(shù)目較多,使用默認的UITableViewCell會非常影響性能。奇怪的是,使用自定義的view,而非預(yù)定義的view,明顯會快些。當然,最佳的解決辦法還是繼承UITableViewCell,并在其drawRect:中自行繪制:(void)drawRect:(CGRect)rect { if(image){ [image drawAtPoint:imagePoint]。 = nil。} else { [placeHolder drawAtPoint:imagePoint]。} [text drawInRect:textRect withFont:font lineBreakMode:UILineBreakModeTailTruncation]。} 不過這樣一來,你會發(fā)現(xiàn)選中一行后,這個cell就變藍了,其中的內(nèi)容就被擋住了。最簡單的方法就是將cell的selectionStyle屬性設(shè)為UITableViewCellSelectionStyleNone,這樣就不會被高亮了。此外還可以創(chuàng)建CALayer,將內(nèi)容繪制到layer上,:方法。這個例 子中,layer并不會顯著影響性能,但如果layer透明,或者有圓角、變形等效果,就會影響到繪制速度了。解決辦法可參見后面的預(yù)渲染圖像。不要做多余的繪制工作。在實現(xiàn)drawRect:的時候,它的rect參數(shù)就是需要繪制的區(qū)域,這個區(qū)域之外的不需要進行繪制。例如上例中,就可以用CGRectIntersectsRect、CGRectIntersection或CGRectContainsRect判斷是否需要繪制image和text,然后再調(diào)用繪制方法。預(yù)渲染圖像。你會發(fā)現(xiàn)即使做到了上述幾點,當新的圖像出現(xiàn)時,仍然會有短暫的停頓現(xiàn)象。解決的辦法就是在bitmap context里先將其畫一遍,導(dǎo)出成UIImage對象,然后再繪制到屏幕,詳細做法可見《利用預(yù)渲染加速iOS設(shè)備的圖像顯示》。不要阻塞主線程。做到前幾點后,你的table view滾動時應(yīng)該足夠流暢了,不過你仍可能讓用戶感到不爽。常見的現(xiàn)象就是在更新數(shù)據(jù)時,整個界面卡住不動,完全不響應(yīng)用戶請求。出現(xiàn)這種現(xiàn)象的原因就是主線程執(zhí)行了耗時很長的函數(shù)或方法,在其執(zhí)行完畢前,無法繪制屏幕和響應(yīng)用戶請求。其中最常見的就是網(wǎng)絡(luò)請求了,它通常都需要花費數(shù)秒的時間,而你不應(yīng)該讓用戶等待那么久。解決辦法就是使用多線程,讓子線程去執(zhí)行這些函數(shù)或方法。這里面還有一個學(xué)問,當下載線程數(shù)超過2時,會顯著影響主線程的性能。因此在使用 ASIHTTPRequest時,可以用一個NSOperationQueue來維護下載請求,并將其maxConcurrentOperationCount設(shè)為2。而NSURLRequest則可以配合GCD來實現(xiàn),或者使用NSURLConnection的setDelegateQueue:方法。當然,在不需要響應(yīng)用戶請求時,也可以增加下載線程數(shù),以加快下載速度:(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { if(!decelerate){ = 5。} }(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { = 2。} 此外,自動載入更新數(shù)據(jù)對用戶來說也很友好,這減少了用戶等待下載的時間。例如每次載入50條信息,那就可以在滾動到倒數(shù)第10條以內(nèi)時,加載更多信息:(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if( 10 amp。amp。!updating){ updating = YES。[self update]。} }// update方法獲取到結(jié)果后,設(shè)置updating為NO 還有一點要注意的就是當圖片下載完成后,如果cell是可見的,還需要更新圖像:NSArray *indexPaths = [ indexPathsForVisibleRows]。for(NSIndexPath *visibleIndexPath in indexPaths){ if(indexPath == visibleIndexPath){ MyTableViewCell *cell =(MyTableViewCell *)[ cellForRowAtIndexPath:indexPath]。 = image。[cell setNeedsDisplayInRect:imageRect]。break。} }// 也可不遍歷,直接與頭尾相比較,看是否在中間即可。最后還是前面所說過的insertRowsAtIndexPaths:withRowAnimation:方法,插入新行需要在主線程執(zhí)行,而一次插入很多行的話(例如50行),會長時間阻塞主線程。而換成reloadData方法的話,瞬間就處理完了。l 4 tableview的cell里如何嵌套collection view?思路同網(wǎng)易新聞類似, 用自定義的繼承自UITableViewCell的類, 在initWithFrame的構(gòu)造方法中, 初始化自定義的繼承自UICollectionView的類 下拉和上拉的原理? 上拉和下拉的原理可以參照新浪微博的上拉和下拉刷新, 以tableView的上拉刷新為例:1 為了進行無縫閱讀, 通過tableView的代理方法, willDisplayCell判斷是否是最后一行,2 如果是最后一行, 在顯示最后一行的同時, 判斷當前是否存在上拉刷新 3 如果當前沒有上拉刷新, 就進行加載數(shù)據(jù), 啟動”橘花”以tableView的下拉刷新為例: 1 判斷當前的上拉刷新視圖是否動畫2 如果沒有動畫, 就不是上拉刷新 3 然后下拉刷新加載數(shù)據(jù) 4 加載完畢數(shù)據(jù)關(guān)閉刷新
點擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1