軟件架構:
按功能有mvc mvvm 蜕青,按照稱此 有數(shù)據(jù)層险掀,邏輯層,展示層
iOS9新特性
臨時開啟后臺定位
iOS9新加了實時交通
WKWebView
UIAlertView 過期 iOS9使用UIAlertController
-
Multitasking (多任務視圖) (使用Size Class進行布局來支持)
- 臨時調(diào)出的滑動覆蓋
- 視頻播放的畫中畫模式
- 以及真正的同時兩個app的分割視圖
MPMoviePlayerCoontroller 過時 (不在繼續(xù)維護),使用AVKit 中的AVPlayerViewController
watchOS 2
UI Test
Swift 2
性能優(yōu)化
- cell重用
- view盡量不要透明 透明控件渲染耗費的性能較大 設置opaque(不透明)為YES (原因:如果是不透明的炬灭,就不用考慮底下的視圖瘫想,如果是透明的仗阅,則需要考慮透明view底下的view)
- 異步加載網(wǎng)絡數(shù)據(jù)
- 不要在cellForRow...中綁定數(shù)據(jù),在willDisplay?Cells中綁定數(shù)據(jù)
- 盡量減少cell中控件的數(shù)量
- 盡量少用 addSubview 給cell 動態(tài)添加view国夜,可以初始化時就添加减噪,然后通過 hidden 控制顯示
- 在 heightForRowAtIndexPath: 中盡量不要使用 cellForRowAtIndexPath: (因為heightForRowAtIndexPath調(diào)用的次數(shù)很頻繁)
- 提前計算并緩存好高度,因為heightForRowAtIndexPath:是調(diào)用最頻繁的方法之一车吹,一定不要使用自動計算行高
- 滑動時按需加載筹裕,這個在大量圖片展示,網(wǎng)絡加載的時候很管用窄驹,目前的第三方框架都處理的很好了朝卒。
自己添加的view會比系統(tǒng)的view要小 性能會更高
設置圖片 可以用畫上去
內(nèi)存優(yōu)化
用SDWebImage加載jif格式文件時會在內(nèi)存中緩存圖片,改用YYWebImage 問題解決乐埠。由于SD是把Gif中的圖片幀存放到數(shù)組抗斤,再進行播放,而YY加載一張播放一張釋放一張
1丈咐、Analyze瑞眼,靜態(tài)分析內(nèi)存泄露的方法。很簡單棵逊,在Xcode菜單欄中點擊 ”Product“ -> "Analyze",編譯完成后項目工程中可能造成內(nèi)存泄露的代碼就會被標記出來负拟,這樣我們就可以有針對性的更改代碼優(yōu)化內(nèi)存了。
2歹河、使用Xcode的自帶工具Leaks掩浙,動態(tài)的檢測內(nèi)存泄露花吟。
1>在Xcode菜單欄中點擊 ”Product“ -> "Profile"(如圖1-1),彈出instruments窗口如圖1-2
2>在instruments窗口中點擊 ”Leaks“(如圖1-2),一般Leaks就開始自動檢測項目內(nèi)存泄露的地方了厨姚,在此過程中可以對手機上運行的測試工程進行操作衅澈,如圖1-3,Leaks 后出現(xiàn)的紅色 柱形表示有內(nèi)存泄露谬墙。
3>雙擊如圖1-4中出現(xiàn)類名今布,就會顯示出此類此方法中造成內(nèi)存泄露的代碼了如圖1-5,然后我們就可以有針對性的優(yōu)化代碼拭抬、優(yōu)化內(nèi)存了部默。
Instruments
- 使用 Allocations 來檢測內(nèi)存和堆棧信息
- 使用 Leaks 檢測內(nèi)存的使用情況,包括內(nèi)存泄露問題
- 使用 Zombies 來檢測過早釋放的僵尸對象造虎,通過它可以檢測出在哪里崩潰的(image lookup -a <崩潰地址>)
- 使用 Time Profiler 來檢測 CPU 內(nèi)存使用情況
將來是怎么規(guī)劃的傅蹂?
答:三年達到技術總監(jiān)的水平
(技術總監(jiān)需要做什么?:1.技術過硬 2.溝通交流算凿,帶領團隊...)
為什么離開上家公司份蝴?
業(yè)務單一,想要更大的提升空間氓轰,
工作中遇到的難題婚夫?
1> block為空的時候,調(diào)用該block程序會崩潰(Crush)
2> 利用tableView的headerViewForSection:方法獲取headerView時一直是nil署鸡。原因應該是設置headerView時利用- (UIView *)tableView: viewForHeaderInSection:的代理方法返回的UIView應該是UITableViewHeaderFooterView類型的案糙,很多時候被他的返回值(UIView *)誤導了。
3> 項目中需要用到循環(huán)刷新數(shù)據(jù)靴庆,利用NSTimer來實現(xiàn)时捌,但是想在VC銷毀時停掉timer(就是在dealloc方法中停掉),結果發(fā)現(xiàn)dealloc根本不調(diào)用撒穷,原本以為是引用計數(shù)沒有減到0匣椰,可是問題不在此,而就在NSTimer這端礼。結果在viewDidDisappear:停掉timer后就調(diào)用dealloc方法了禽笑。
4> 利用viewWithTag:尋找子View時,出現(xiàn)絕對性的錯誤蛤奥,對象類型都不對佳镜。問題出現(xiàn)在設置的tag有重復,要注意的是子View在包括子View的子View的tag都不可以重復凡桥,所以建議另外創(chuàng)建一個文件專門設定tag蟀伸,就像android中的R.java文件一樣來確保tag的唯一。
5> JS交互時,由于 JavaScriptCore 存在作用域問題 有時會獲取不到 Web 中的元素啊掏。
6> (低級錯誤)請求數(shù)據(jù)的時候蠢络,參數(shù)寫錯(由于參數(shù)都是字符串,沒有提示迟蜜,容易寫錯)
堆和棧的區(qū)別刹孔?
管理方式:
對于棧來講,是由編譯器自動管理娜睛,無需我們手工控制髓霞;
對于堆來說,釋放工作是由程序員控制畦戒。(現(xiàn)在ARC情況方库,不需要手動管理內(nèi)存)
地址分配:
棧是向低地址擴展(地址由高向低分配)的數(shù)據(jù)結構,是一塊連續(xù)的內(nèi)存的區(qū)域障斋。
堆是想高地址擴展(地址由低向高分配)的數(shù)據(jù)結構纵潦,是不連續(xù)的內(nèi)存區(qū)域。(這是由于系統(tǒng)是用鏈表來存儲的空閑內(nèi)存地址的配喳,自然是不連續(xù)的酪穿,而鏈表的遍歷方向是由低地址向高地址)
分配方式:
棧有兩種分配方式:靜態(tài)分配和動態(tài)分配凳干。靜態(tài)分配是由編譯器完成的晴裹,如局部變量的分配。動態(tài)分配由alloca函數(shù)進行分配救赐。
堆都是動態(tài)分配的涧团,沒有靜態(tài)分配的堆。
進程和線程的區(qū)別经磅?
進程
:“正在運行”的應用程序(app)泌绣,就是一個進程。
進程為應用程序開辟一塊獨立的內(nèi)存空間预厌。(這塊內(nèi)存空間是受保護的阿迈,進程和進程之間是互不干擾的)
線程
:線程執(zhí)行進程(應用程序)中的代碼。
線程是CPU調(diào)度的最小單元轧叽。
進程和線程的關系:
每一個應用程序啟動之后苗沧,都會默認/自動生成一條線程。
進程是由一個或多個線程組成的炭晒,每條線程都可以執(zhí)行不同的代碼待逞。
線程并不是越多越好,原因:
(1)開啟線程需要消耗一定的內(nèi)存(默認情況下网严,一個線程占用512KB的棧區(qū)空間)
(2)會使應用程序增加很多代碼识樱。代碼變多之后,程序的復雜性就會提高。
(3)CPU在多條線程之間來回切換怜庸,線程越到当犯,CPU的負擔就越大
建議:在移動應用的開發(fā)中,一般只開3~5條線程割疾。
XML和JSON解析灶壶?
-
XML解析:
- 方式一:(框架GDataXML)
DOM的方式解析是將XML文檔一次性加載到內(nèi)存中,再進行解析杈曲。
用DOM的方式解析XML需要用到第三方框架 GDataXML - 方式二:(蘋果自帶)
SAX方式解析XML文檔:方式:將XML文檔一行一行逐行進行解析驰凛。需要設置代理,使用代理方法<NSXMLParserDelegate>
- 方式一:(框架GDataXML)
-
JSON解析:(蘋果自帶)
- NSJSONSerialization :JSON 解析器,可以直接將標準的JSON 數(shù)據(jù)解析成 OC 數(shù)據(jù)担扑。
根據(jù)JSON最外層的類型來判斷是用數(shù)組還是用字典來接收恰响。
[NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
- NSJSONSerialization :JSON 解析器,可以直接將標準的JSON 數(shù)據(jù)解析成 OC 數(shù)據(jù)担扑。
IT社區(qū)
- DevDiv:移動開發(fā)社區(qū)
- 博客園
- CSDN
- 簡書
- cocoachina
- code4app
- 51CTO.com:IT技術網(wǎng)站,是一個為CTO、IT技術經(jīng)理涌献、開發(fā)工程師胚宦、項目管理人員...
-
mobilehub
(漠河
):里邊包含了設計、開發(fā)燕垃、測試枢劝、運營等模塊,各模塊中包含很多其他相關的網(wǎng)站
學習網(wǎng)站
- w3school:各種語言卜壕,手冊
- objccn (objc中國):一些分享文章
算法
排序算法:
- 簡單排序
- 冒泡排序
- 選擇排序
- 插入排序
- 直接插入排序
- 折半插入排序(二分插入排序)
- 快速排序您旁,(常見)
- 堆排序
- 歸并排序,(最穩(wěn)定的轴捎,即沒有太差的情況)
直接插入排序
直接插入排序
:基本思想:把待排序的紀錄按其關鍵碼值的大小逐個插入到一個已經(jīng)排好序的有序序列中鹤盒,直到所有的紀錄插入完為止,得到一個新的有序序列侦副。
直接插入排序的算法思路
:
(1) 設置監(jiān)視哨r[0]侦锯,將待插入紀錄的值賦值給r[0];
(2) 設置開始查找的位置j秦驯;
(3) 在數(shù)組中進行搜索尺碰,搜索中將第j個紀錄后移,直至r[0].key≥r[j].key為止译隘;
(4) 將r[0]插入r[j+1]的位置上亲桥。
折半插入
折半插入
:執(zhí)行折半插入排序的前提是文件紀錄必須按順序存儲。
希爾排序法
希爾排序法
:先選定一個整數(shù)细燎,把待排序文件中所有記錄分成個組两曼,并對每一組內(nèi)的記錄進行排序,重復上述分組和排序的工作玻驻。
堆排序
堆排序
:堆排序(Heapsort)是指利用堆積樹(堆)這種數(shù)據(jù)結構所設計的一種排序算法悼凑,它是選擇排序的一種偿枕。可以利用數(shù)組的特點快速定位指定索引的元素户辫。堆分為大根堆和小根堆渐夸,是完全二叉樹。大根堆的要求是每個節(jié)點的值都不大于其父節(jié)點的值渔欢,即A[PARENT[i]] >= A[i]墓塌。在數(shù)組的非降序排序中,需要使用的就是大根堆奥额,因為根據(jù)大根堆的要求可知苫幢,最大的值一定在堆頂。
歸并排序
歸并排序
:是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法(Divide and Conquer)的一個非常典型的應用垫挨。將已有序的子序列合并韩肝,得到完全有序的序列;即先使每個子序列有序九榔,再使子序列段間有序哀峻。若將兩個有序表合并成一個有序表,稱為二路歸并哲泊。
查找算法
1> 順序查找
2> 二分查找
又稱折半查找
剩蟀,它是一種效率較高的查找方法。
【二分查找要求】:1.必須采用順序存儲結構2.必須按關鍵字大小有序排列切威。
【優(yōu)缺點】折半查找法的優(yōu)點是比較次數(shù)少育特,查找速度快,平均性能好;其缺點是要求待查表為有序表牢屋,且插入刪除困難且预。因此槽袄,折半查找方法適用于不經(jīng)常變動而查找頻繁的有序列表烙无。
3> 分塊查找
:
方法描述:將n個數(shù)據(jù)元素"按塊有序"劃分為m塊(m ≤ n)。每一塊中的結點不必有序遍尺,但塊與塊之間必須"按塊有序"截酷;即第1塊中任一元素的關鍵字都必須小于第2塊中任一元素的關鍵字;而第2塊中任一元素又都必須小于第3塊中的任一元素乾戏,……迂苛。
操作步驟:
step1 先選取各塊中的最大關鍵字構成一個索引表;
step2 查找分兩個部分:先對索引表進行二分查找或順序查找鼓择,以確定待查記錄在哪一塊中三幻;然后,在已確定的塊中用順序法進行查找呐能。
4> 哈希表查找
:設計一個函數(shù)(哈希函數(shù)念搬, 也叫做散列函數(shù))抑堡,使得每個元素的關鍵字都與一個函數(shù)值(即數(shù)組下標)相對應,于是用這個數(shù)組單元來存儲這個元素
數(shù)據(jù)結構
常用結構:數(shù)組朗徊、鏈表首妖、堆、棧爷恳、隊列有缆、樹、圖温亲、散列表
堆
堆
是一種特殊的樹形數(shù)據(jù)結構
棚壁,每個結點都有一個值。通常
我們所說的堆的數(shù)據(jù)結構
栈虚,是指二叉堆
灌曙。堆的特點是根結點的值最小(或最大)节芥,且根結點的兩個子樹也是一個堆
圖
圖
:是由結點的有窮集合V(點)和邊的集合E組成在刺。其中,為了與樹形結構加以區(qū)別头镊,在圖結構中常常將結點稱為頂點蚣驼,邊是頂點的有序偶對,若兩個頂點之間存在一條邊相艇,就表示這兩個頂點具有相鄰關系颖杏。
散列表
若結構中存在關鍵字和K相等的記錄,則必定在f(K)的存儲位置上坛芽。由此留储,不需比較便可直接取得所查記錄。稱這個對應關系f為散列函數(shù)(Hash function)咙轩,按這個思想建立的表為散列表获讳。
基本算法的思想
回溯:
回溯法
也稱試探法
,它的基本思想是:從問題的某一種狀態(tài)(初始狀態(tài))出發(fā)活喊,搜索從這種狀態(tài)出發(fā)所能達到的所有“狀態(tài)”丐膝,當一條路走到“盡頭”的時候(不能再前進),再后退一步或若干步钾菊,從另一種可能“狀態(tài)”出發(fā)帅矗,繼續(xù)搜索,直到所有的“路徑”(狀態(tài))都試探過煞烫。這種不斷“前進”浑此、不斷“回溯”尋找解的方法,就稱作“回溯法”滞详。
遞歸:
遞歸
凛俱,就是在運行的過程中調(diào)用自己喘落。
構成遞歸需要具備的條件:
- 子問題必須與原始問題做同樣的事,且更加簡單最冰。
- 不能無限制的調(diào)用本身瘦棋,必須有個出口,化簡為非遞歸的狀態(tài)處理暖哨。
貪心:
貪心算法
(又稱貪婪算法)是指赌朋,在對問題求解時,總是做出在當前看來是最好的選擇篇裁。也就是說沛慢,不從整體最優(yōu)上加以考慮,他所做出的是在某種意義上的局部最優(yōu)解达布。
分治:
分治算法
的基本思想是將一個規(guī)模為N的問題分解為K個規(guī)模較小的子問題团甲,這些子問題相互獨立且與原問題性質相同。求出子問題的解黍聂,就可得到原問題的解躺苦。即一種分目標完成程序算法,簡單問題可用二分法完成产还。
例:給你一個裝有1 6個硬幣的袋子匹厘。1 6個硬幣中有一個是偽造的,并且那個偽造的硬幣比真的硬幣要輕一些脐区。找出偽幣愈诚。