1. ?App上線流程
?1.appID ? ? ? 2.發(fā)布證書 ? ?3.在官網(wǎng)填寫app的信息 ? ? ? ?4.壓縮打包 ? ? ? 5.在官網(wǎng)添加打包好的工程 ? ? ? 6.提交審核 等待結(jié)果
2.KVO KVC的區(qū)別?在實(shí)際工作中在哪用到了 KVC KVO?
KVC 鍵值編碼 通過把屬性名 當(dāng)成key 來改變屬性的值
KVO 鍵值觀察者 通過KVC的方式 把屬性當(dāng)做key 來觀察屬性值的變化? 做出響應(yīng)
數(shù)據(jù)轉(zhuǎn)模型 用到了KVC
封裝下拉改變導(dǎo)航欄透明度的時候? 使用的是KVO
3.單例
通過方法讓對象只創(chuàng)建一次,可以避免重復(fù)創(chuàng)建 ,節(jié)省內(nèi)存開支。
4.淺復(fù)制和深復(fù)制的區(qū)別?
淺層復(fù)制(copy):只復(fù)制指向?qū)ο蟮闹羔?而不復(fù)制引用對象本身。//通過對象的指針來訪問這個對象----只賦值地址,對于淺復(fù)制來說,A和A_copy指向的是同一個內(nèi)存資源,復(fù)制的 只不過是是一個指針,對象本身資源 還是只有一份,那如果我們對A_copy執(zhí)行了修改操作,那么發(fā)現(xiàn)A引用的對象同樣被修改,這其實(shí)違背了我們復(fù)制拷貝的一 個思想。
深層復(fù)制(mutableCopy):復(fù)制引用對象本身---再創(chuàng)建一個對象 意思就是有個A對象,復(fù)制一份后得到A_copy對象后,深復(fù)制就好理解了,內(nèi)存中存在了,兩份獨(dú)立對象本身。
5.數(shù)據(jù)持久化存儲方式有哪些?以及特點(diǎn)?
1.plist 屬性列表 最外層只能存儲數(shù)組字典 里面只能存儲 bool NSNumber String Data Date
2.NSUserDefault 最終也是保存成plist 系統(tǒng)封裝了保存的路徑 保存的方法
3.歸檔 可以對保存數(shù)據(jù)的文件 進(jìn)行加密
4.sqlite? 關(guān)系型數(shù)據(jù)庫 以表的形式存儲? FMDB是對 OC中 sqlite操作封裝 的第三方庫
5.coreData 是蘋果封裝的 對文件操作的框架 可以 以對象的形式存儲 底層數(shù)據(jù)文件可以是sqlite類型 也可以是XML JSON …
6.談?wù)勀銓VC的理解? ?為什么要用MVC?
MVC就是Model-View-Controller的縮寫,M指的是業(yè)務(wù)模型,V指的是用戶頁面,C指的是控制器。MVC是架構(gòu)模式,是講M和 V的代碼分離,從而使同那個一個程序可以使用不同的表現(xiàn)形式。
7. 面向?qū)ο蟮娜齻€基本特征是?
?封裝、繼承、多態(tài)
8.線程與進(jìn)程的區(qū)別和聯(lián)系?
線程是進(jìn)程的基本單位進(jìn)程和線程都是由操作系統(tǒng)所體會的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對應(yīng)用的并發(fā)性。
進(jìn)程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式。進(jìn)程有獨(dú)立的地址空間,一個進(jìn)程崩潰后,在保護(hù)模式下get post 不會對其它進(jìn)程產(chǎn)生影響,而線程只是一個進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨(dú)的 地址空間,一個線程死掉就等于整個進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時,耗費(fèi)資源較 大,效率要差一些。但對于一些要求同時進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進(jìn)程。
9.多線程有幾種方式??
NSTherd, NSOperation, GCD
10.檢查內(nèi)存管理問題的方式有哪些?
1)點(diǎn)擊Xcode頂部菜單中的Product Analyze。這種方法主要可以查看內(nèi)存泄露,變量未初始化,變量定義后沒有被使用到
2)使用Instrument工具檢查。點(diǎn)擊Xcode頂部菜單中的Product Profile,彈出一個界面,選擇左側(cè)的Memory后,再選右側(cè)的Leaks。
3)人工檢查
11.分類,延展,繼承?
分類:一般用于擴(kuò)展一個類的方法,它可以不用創(chuàng)建一個新的類,但是不能夠擴(kuò)充成員變量,使用分類重寫本類的方法后無法再調(diào)用原來的方法,使用分類還能夠?qū)⒁粋€類的定義寫在不同的文件內(nèi),可以拆分業(yè)務(wù)邏輯,使一個分類的功能更專一。
延展(extension):延展相當(dāng)于匿名的分類,一般寫在實(shí)現(xiàn)文件里面(.m文件),它可以擴(kuò)充私有變量和方法,但是變量和方法只能在本文件內(nèi)有效(私有的),其他文件不可以調(diào)用。(并且一般不會有人通過延展擴(kuò)充方法)。
繼承 :使用繼承擴(kuò)充一個類,需要再創(chuàng)建一個子類,能夠擴(kuò)充成員變量和方法,可以重寫父類的方法,而且可以通過super調(diào)用父類的方法,但是由于繼承于父類。
12.項(xiàng)目:自適應(yīng)Cell(流程)
需要自適應(yīng)cell時,首先要自定義Cell視圖,自定義時最好使用分層的設(shè)計,這樣的設(shè)計方式可以增加代碼的復(fù)用性,看起來也比較清晰,更改需求時,代碼的變動也比較小然后肯定要有數(shù)據(jù)模型model,然后還要根據(jù)分層創(chuàng)建對應(yīng)的frameModel,每一個frameModel對應(yīng)一個Cell的層,使用時通過frameModel給對應(yīng)的控件frame賦值,在frameModel內(nèi)部則是,通過最底層的frameModel中的model數(shù)據(jù)傳遞給上層的frameModle模型,直到最后的分層,然后通過數(shù)據(jù)計算相應(yīng)控件的大小,然后最上層的frameModel將自己的frame傳遞給下層,這樣一級一級傳遞,到達(dá)最底層的frameModel時就可以計算出所對應(yīng)的cellHeight。
13.程序構(gòu)架(流程)
寫框架前 要仔細(xì)分析各個模塊及控制器之間的跳轉(zhuǎn)和依賴的關(guān)系,比如分析一下看看這幾個控制之間有沒有什么樣的view是可以重用的,如果有的話,就不要在第一次使用的這個View是將其和控制器綁定在一塊,可以自定義一個view,以備以后重用時簡便,考慮以后需求修改的可能性,我感覺最好邏輯比較復(fù)雜又有tableview或者collectionView時都是用UIViewController作為底層控制器比較好,只是在上面添加你想用的到View即可。
14.自定義控件(流程)
自定義控件經(jīng)常是使用,一般情況下,自定義一個控件首先你要知道這個控件是干嘛用得,它需不需要顯示圖片,文字,需不需要點(diǎn)擊,需不需要變動frame等,然后根據(jù)響應(yīng)的需求留下對應(yīng)的接口,比如點(diǎn)擊一個自定義控件,那這個控件需要通知控制它被點(diǎn)擊了,簡單情況下如果只有一個button,只需要通知一個控制器,就可以通過外部定義一個。
15.收藏、最近?
收藏和最近主要就是使用工具類對數(shù)據(jù)進(jìn)行增加和刪除,保存數(shù)據(jù)時要重寫數(shù)據(jù)的equalto方法(因?yàn)橛嬎銠C(jī)是根據(jù)內(nèi)存地址比較的,而有時候內(nèi)存地址雖然不同,但是儲存的數(shù)據(jù)確實(shí)一樣的,所以一般根據(jù)數(shù)據(jù)的位置標(biāo)識(例如id值)比較)
如果是做最近,就需要將上一次的數(shù)據(jù)刪除,添加新的數(shù)據(jù)進(jìn)來,如果在搜藏是需要記錄控件的編輯和選中狀態(tài),就需要在數(shù)據(jù)模型中添加相應(yīng)的屬性,利用數(shù)據(jù)來控制控件的狀態(tài)
常出現(xiàn)的問題就是使用tableview時會出現(xiàn)循環(huán)利用的問題,這個問題就可以使用數(shù)據(jù)的值來避免,每次加載cell時,他的狀態(tài)是受數(shù)據(jù)控制的,數(shù)據(jù)不會發(fā)生循環(huán)利用的問題,這個問題也就不會出現(xiàn)了。
16.推送流程?
一般意義上說推送就是指遠(yuǎn)程推送,本地推送一般可以用來提示長時間未進(jìn)入應(yīng)用的用戶,也可以用來做鬧鈴。
(一個程序可以推送,首先你要向蘋果公司注冊推送證書)
下面詳細(xì)說一下遠(yuǎn)程推送的流程:
1.當(dāng)你的程序需要推送時,通過UIApplication中的registerUserNotification注冊遠(yuǎn)程推送,注冊后,你的程序會通過iOS系統(tǒng)向APNs服務(wù)器請求,APNs服務(wù)器接到請求后會將請求設(shè)備的device token(設(shè)備令牌)發(fā)送回你的應(yīng)用,在UIApplication的代理方法中可以接收到device token,如果請求失敗也會通過代理方法返回錯誤信息。
2.當(dāng)應(yīng)用程序拿到device token后,就可以將device token回傳給應(yīng)用提供商服務(wù)器,服務(wù)器就知道了這臺設(shè)備可以推送消息了,然后將device token儲存在服務(wù)器內(nèi)部,device token的生成算法只有蘋果公司才知道,所以為了防止蘋果修改算法造成推送失敗,最好每次啟動程序時都請求一次device token,在device token發(fā)生改變時,告訴服務(wù)器新的device token。
(推送一般情況下是程序提供商向用戶推送一些最新的消息或者資訊,不過比如QQ,微信等可以在離線的情況下進(jìn)行消息的提醒,下面以qq推送離線消息為例,相比從服務(wù)器推送,qq離線消息的推送是由客戶端編輯信息的)。
3.現(xiàn)在如果程序要推送消息了,就可以將消息和要發(fā)送的對象的賬號發(fā)送給程序提供商服務(wù)器,服務(wù)器會通過你要推送的對象的賬號信息找到對應(yīng)綁定的device token,然后將推送消息內(nèi)容和device token傳給APNs服務(wù)器。
4.APNs服務(wù)器在接收到消息內(nèi)容和device token后會查找已注冊的設(shè)備然后將對應(yīng)的信息和device token推送到指定的設(shè)備上,設(shè)備通過device token中的app id找到要推送的app,然后信息會按照app的推送設(shè)置顯示信息。
推送流程:
deviceToken:包括appID和UDID。手機(jī)在聯(lián)網(wǎng)狀態(tài)下,與蘋果有個長連接,可以生成一個deviceToken,在appdelegate的didReceiveXXX方法里和可以獲取deviceToken。
17.二維碼?
做二維碼的話,可以使用的第三發(fā)庫有ZBar和ZXing具體使用方法可以去網(wǎng)上查看文檔
但是現(xiàn)在iOS中的AVFoundation框架中也集成了二維碼掃描,用起來也十分方便,并且掃描速度也更快,還可以使用AVFoundation框架生成二維碼。
18.支付功能:支付寶,微信,銀聯(lián)?
支付寶
1.導(dǎo)入AlipaySDK.bundle? ?AlipaySDK.framework 系統(tǒng)庫SystemConfiguration.framework
2.導(dǎo)入頭文件 #import
3.info.plist注冊scheme
4.配置請求Order信息
《1》將商品信息拼接成字符串
《2》獲取私鑰并簽名商戶信息
《3》生成訂單
5.設(shè)置回調(diào)方法
微信
1.開放平臺申請帳號 并開通支付功能
2.導(dǎo)入SDK 添加依賴庫
3.后臺生成訂單 開始支付
4.用戶確認(rèn)信息輸入密碼
5.支付完成 跳回app
銀聯(lián)
UPPayPlugin無卡交易
UPPayPluginPro無卡交易和VIPOS音頻口支付
需要把.m改成.mm
1.添加SDK包 添加系統(tǒng)庫
2.服務(wù)器準(zhǔn)備交易流水號
3.startPay 開始支付
4.設(shè)置回調(diào)方法 ?