iOS 基礎(chǔ)知識(shí)點(diǎn)3

UITableView性能優(yōu)化哭廉?滑動(dòng)的時(shí)候有種卡的感覺是為什么战虏?怎么解決?

· 在使用第三方應(yīng)用時(shí)轩端,卻經(jīng)常遇到性能上的問題放典,普遍表現(xiàn)在滾動(dòng)時(shí)比較卡,特備是cell包含圖片的情況時(shí)
· 實(shí)際上針對(duì)性地優(yōu)化一下就可以解決tableView滑動(dòng)時(shí)候卡頓的問題
  * 使用不透明視圖基茵。不透明的視圖可以提高渲染的速度奋构。可以將cell及其子視圖的opaque屬性設(shè)為YES(默認(rèn)值)
  * 不要重復(fù)創(chuàng)建不必要的cell.UITableView只需要一屏幕的UITableViewCell對(duì)象即可拱层。因此在cell不可見時(shí)弥臼,可以將其緩存起來,而需要時(shí)繼續(xù)使用它即可根灯。注意:cell被重用時(shí)径缅,需要調(diào)用setNeedsDisplayInRect:或setNeedsDisplay方法重繪cell.
  * 減少動(dòng)畫效果的使用,最好不要使用insertRowsAtIndexPaths:withRowAnnimation: 方法烙肺,而是調(diào)用reloadData方法纳猪。
  * 減少視圖的數(shù)目。cell包含了textLabel,detailTextLabel和ImageView等view,而你還可以自定義一些視圖放在他的contentView里桃笙,創(chuàng)建它會(huì)消耗較多資源氏堤,并且也影響性能。
  * 不要做多與的繪制工作搏明。在實(shí)現(xiàn)drawRect:的時(shí)候鼠锈,它的rect參數(shù)就是需要繪制的區(qū)域,這個(gè)區(qū)域之外的不需要進(jìn)行繪制星著。
  * 預(yù)渲染圖像购笆。你會(huì)發(fā)現(xiàn)即使做到了上訴幾點(diǎn),當(dāng)新的圖像出現(xiàn)時(shí)虚循,仍然會(huì)有短暫的停頓現(xiàn)象由桌。解決的辦法就是在圖形上下文中畫,導(dǎo)出UIImage對(duì)象邮丰,然后在繪制到屏幕。(頭像圓角铭乾,或者其他變形的時(shí)候剪廉,用圖像上下文能提高性能)異步繪制。
  * 不要阻塞主線程炕檩。tableview在更新數(shù)據(jù)時(shí)斗蒋,整個(gè)界面都卡住不動(dòng)捌斧,完全不響應(yīng)應(yīng)用用戶強(qiáng)求。常見的是網(wǎng)絡(luò)請(qǐng)求泉沾,等待時(shí)間長(zhǎng)達(dá)數(shù)秒捞蚂。解決方案:使用多線程,讓子線程去執(zhí)行這些函數(shù)或方法跷究。
   注意:當(dāng)下載線程數(shù)超過2時(shí)姓迅,會(huì)影響主線程的性能。所以在不需要響應(yīng)用戶請(qǐng)求時(shí)俊马,下載線程數(shù)可以增加到5丁存,不建議再加了,以加塊下載熟讀柴我。如果用戶正在交互解寝,應(yīng)把線程數(shù)量控制在2個(gè)以內(nèi)。
  *  提前計(jì)算并緩存好高度艘儒,因?yàn)閔eightForRowAtIndexPaht調(diào)用非常頻繁聋伦。
  * gzip/zip壓縮:當(dāng)從服務(wù)端下載相關(guān)附件時(shí),可以通過gzip/zip壓縮后再下載界睁,使得內(nèi)存更小觉增,下載速度也更快。

awakeFromNib與viewDidLoad區(qū)別

awakeFromNib:當(dāng).nib文件被加載的時(shí)候晕窑,會(huì)發(fā)送一個(gè)awakeFromNib消息到.nib文件中的每個(gè)對(duì)象抑片,每個(gè)對(duì)象都可以定義自己的awakeFromNib函數(shù)來響應(yīng)這個(gè)消息杨赤,執(zhí)行必要的操作。也就是說通過.nib文件創(chuàng)建view對(duì)象執(zhí)行awakeFromNib
viewDidLoad:當(dāng)view對(duì)象被加載到內(nèi)存就會(huì)執(zhí)行viewDidLoad,不管是通過.nib還是代碼形式济锄,創(chuàng)建對(duì)象就會(huì)執(zhí)行viewDidLoad.

layoutSubview何時(shí)調(diào)用避消?

1.初始化init方法時(shí)不會(huì)觸發(fā)
2.滾動(dòng)UIScrollView觸發(fā)
3.旋轉(zhuǎn)屏幕觸發(fā)
4.改變view的值觸發(fā)恕沫,前提是frame改變了
5.改變UIView的大小觸發(fā)

描述九宮格算法

1.NSInteger col = x;//定義列數(shù)
2.NSInteger index = self.shopsView.subViews.count;//獲取小標(biāo)
3.CGFloat margin = ( self.shopsView.frame.size.width - col *viewW) / (col - 1);//定義間隔
4.CGFloat viewX = (indeX % col) * (viewW + margin);
5.CGFloat viewY = (index / col) * (viewH + 10);

應(yīng)用的生命周期

1.- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions//告訴代理進(jìn)程啟動(dòng)但還沒有進(jìn)入狀態(tài)
2.- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions//告訴代理啟動(dòng)基本完成程序準(zhǔn)備開始運(yùn)行
3.- (void)applicationWillResignActive:(UIApplication *)application//當(dāng)應(yīng)用程序?qū)⒁M(jìn)入非活躍狀態(tài)執(zhí)行,在此期間,應(yīng)用程序不在接受消息和事件,比如來電話了
4.- (void)applicationDidBecomeActive:(UIApplication *)application//當(dāng)應(yīng)用程序進(jìn)入活躍狀態(tài)執(zhí)行,和上面那個(gè)方法剛好相反
5.- (void)applicationDidEnterBackground:(UIApplication *)application//當(dāng)應(yīng)用程序進(jìn)入后臺(tái)的時(shí)候調(diào)用。所以要設(shè)置后臺(tái)繼續(xù)進(jìn)行,則在這個(gè)函數(shù)里面設(shè)置即可
6.- (void)applicationWillEnterForeground:(UIApplication *)application//當(dāng)應(yīng)用程序從后臺(tái)將要重新回到前臺(tái)時(shí)候調(diào)用,這個(gè)剛好跟上面的那個(gè)方法相反
7.- (void)applicationWillTerminate:(UIApplication *)application// 當(dāng)應(yīng)用程序退出時(shí)被調(diào)用,通常是用來保存數(shù)據(jù)和一些退出前的清理工作

load initalize方法區(qū)別

+(void)load :
* 當(dāng)類對(duì)象被引入項(xiàng)目時(shí),runtime會(huì)向每一個(gè)類對(duì)象發(fā)送load消息
* load方法會(huì)在每一類甚至分類被引入時(shí)僅調(diào)用一次,調(diào)用順序:父類優(yōu)先于子類,元類優(yōu)先于父類
* load方法不會(huì)被類自動(dòng)繼承
+(void)initialize: 也是第一次使用這個(gè)類的時(shí)候會(huì)調(diào)用這個(gè)方法

什么時(shí)候會(huì)發(fā)生隱式動(dòng)畫?

當(dāng)改變CALayer的一個(gè)可做動(dòng)畫的屬性降盹,它并不能立刻在屏幕上體現(xiàn)出來价捧,相反,它是從先前的值平滑到過渡到新的值渔彰。這一切都是默認(rèn)的行為嵌屎,你不需要做額外的操作,這就是隱式動(dòng)畫恍涂。

為什么當(dāng)CoreAnimation完成時(shí)宝惰,layer又會(huì)恢復(fù)到原先的狀態(tài)?

因?yàn)檫@些產(chǎn)生的動(dòng)畫只是假象再沧,并沒有對(duì)layer進(jìn)行改變尼夺。那么為什么會(huì)這樣呢,這里要講一下圖層樹里的呈現(xiàn)樹炒瘸。呈現(xiàn)樹實(shí)際上是模型圖層的復(fù)制淤堵,但是它的屬性值表示了當(dāng)前外觀效果,動(dòng)畫的過程實(shí)際上只是修改了呈現(xiàn)樹什燕,并沒有對(duì)圖層的屬性進(jìn)行改變粘勒,所以 在動(dòng)畫結(jié)束以后圖層會(huì)恢復(fù)到原先狀態(tài)。

xib和storyboards的優(yōu)缺點(diǎn)屎即?

優(yōu)點(diǎn):
- Xib:在編譯前就提供了可視化界面庙睡,可以直接拖控件,也可以直接給控件添加約束技俐,更直觀一些乘陪,而且類文件中就少了創(chuàng)建控件的代碼,確實(shí)簡(jiǎn)化不少雕擂,通常每一個(gè)xib對(duì)應(yīng)一個(gè)類
- Storyboard: 在編譯前提供了可視化界面啡邑,可拖控件,可添加約束井赌,在開發(fā)時(shí)比較直觀谤逼,而且一個(gè)storboard可以有很多的界面贵扰,每一個(gè)界面對(duì)應(yīng)一個(gè)類文件,通過storyboard流部,可以直觀看出整個(gè)app的結(jié)構(gòu)戚绕。
缺點(diǎn):
- Xib:需求改動(dòng)時(shí),需要修改Xib很大枝冀,有時(shí)候甚至需要重新添加約束舞丛,導(dǎo)致開發(fā)周期變長(zhǎng)。xib載入相比純代碼自然要慢一些果漾。對(duì)于比較復(fù)雜邏輯控制不同狀態(tài)下顯示不同內(nèi)容時(shí)球切,使用xib是比較困難的。當(dāng)多人團(tuán)隊(duì)或者多團(tuán)隊(duì)開發(fā)時(shí)绒障,如果xib文件被發(fā)動(dòng)吨凑,極易導(dǎo)致沖突,而且解決沖突相對(duì)要困難很多端盆。
- Sttoryboard: 需求變動(dòng)時(shí)怀骤,需要修改storyboard上對(duì)應(yīng)的界面的約束,與xib一樣可能要重新添加約束焕妙,或者添加約束會(huì)造成大量的沖突蒋伦,尤其是多團(tuán)隊(duì)開發(fā)。對(duì)于復(fù)雜邏輯控制不同顯示內(nèi)容時(shí)焚鹊,比較困難痕届。當(dāng)多人團(tuán)隊(duì)或者多團(tuán)隊(duì)開發(fā)時(shí),大家會(huì)同時(shí)修改一個(gè)soryboard,導(dǎo)致大量沖突末患,解決起來相當(dāng)困難研叫。

事件傳遞與響應(yīng)的完整過程?

在產(chǎn)生一個(gè)事件時(shí)璧针,系統(tǒng)會(huì)將該事件加入到一個(gè)由UIApplication管理的事件隊(duì)列中嚷炉,UIApplication會(huì)從事件隊(duì)列中取出最前面的事件,將它傳遞給先發(fā)送事件給應(yīng)用程序的主窗口探橱。
主窗口會(huì)調(diào)用hitTest方法尋找最合適的視圖控件申屹,找到后就會(huì)調(diào)用視圖控件的touches方法來做具體的事情。
當(dāng)調(diào)用touches方法隧膏,他的默認(rèn)做法哗讥,就會(huì)將時(shí)間順著響應(yīng)者鏈條往上傳,傳遞給上一個(gè)響應(yīng)者胞枕,接著就會(huì)調(diào)用上一個(gè)響應(yīng)者的touches方法杆煞。

使用AFNetworking做過斷點(diǎn)續(xù)傳嗎?

斷點(diǎn)續(xù)傳的主要思路:
  * 檢查服務(wù)文件信息
  * 檢查本地文件
  * 如果比服務(wù)器文件小,斷點(diǎn)續(xù)傳决乎,利用http請(qǐng)求頭的Range實(shí)現(xiàn)斷點(diǎn)續(xù)傳
 * 如果比服務(wù)器文件大队询,重新下載
 * 如果和服務(wù)器文件一樣,下載完成
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末构诚,一起剝皮案震驚了整個(gè)濱河市娘摔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌唤反,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸭津,死亡現(xiàn)場(chǎng)離奇詭異彤侍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)逆趋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門盏阶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人闻书,你說我怎么就攤上這事名斟。” “怎么了魄眉?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵砰盐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我坑律,道長(zhǎng)岩梳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任晃择,我火速辦了婚禮冀值,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宫屠。我一直安慰自己列疗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布浪蹂。 她就那樣靜靜地躺著抵栈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乌逐。 梳的紋絲不亂的頭發(fā)上竭讳,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音浙踢,去河邊找鬼绢慢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胰舆。 我是一名探鬼主播骚露,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼缚窿!你這毒婦竟也來了棘幸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤倦零,失蹤者是張志新(化名)和其女友劉穎误续,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扫茅,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蹋嵌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葫隙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栽烂。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖恋脚,靈堂內(nèi)的尸體忽然破棺而出腺办,到底是詐尸還是另有隱情,我是刑警寧澤糟描,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布怀喉,位于F島的核電站,受9級(jí)特大地震影響蚓挤,放射性物質(zhì)發(fā)生泄漏磺送。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一灿意、第九天 我趴在偏房一處隱蔽的房頂上張望估灿。 院中可真熱鬧,春花似錦缤剧、人聲如沸馅袁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汗销。三九已至,卻和暖如春抵窒,著一層夾襖步出監(jiān)牢的瞬間弛针,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工李皇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留削茁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像茧跋,于是被迫代替她去往敵國和親慰丛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容