1. ?App上線流程
?1.appID ? ? ? 2.發(fā)布證書 ? ?3.在官網(wǎng)填寫app的信息 ? ? ? ?4.壓縮打包 ? ? ? 5.在官網(wǎng)添加打包好的工程 ? ? ? 6.提交審核 等待結(jié)果
2.KVO KVC的區(qū)別?在實際工作中在哪用到了 KVC KVO佩谷?
KVC 鍵值編碼 通過把屬性名 當成key 來改變屬性的值
KVO 鍵值觀察者 通過KVC的方式 把屬性當做key 來觀察屬性值的變化? 做出響應
數(shù)據(jù)轉(zhuǎn)模型 用到了KVC
封裝下拉改變導航欄透明度的時候? 使用的是KVO
3.單例
通過方法讓對象只創(chuàng)建一次凉翻,可以避免重復創(chuàng)建 ,節(jié)省內(nèi)存開支砌溺。
4.淺復制和深復制的區(qū)別?
淺層復制(copy):只復制指向?qū)ο蟮闹羔?而不復制引用對象本身。//通過對象的指針來訪問這個對象----只賦值地址闷旧,對于淺復制來說,A和A_copy指向的是同一個內(nèi)存資源,復制的 只不過是是一個指針,對象本身資源 還是只有一份,那如果我們對A_copy執(zhí)行了修改操作,那么發(fā)現(xiàn)A引用的對象同樣被修改,這其實違背了我們復制拷貝的一 個思想蓉冈。
深層復制(mutableCopy):復制引用對象本身---再創(chuàng)建一個對象 意思就是有個A對象,復制一份后得到A_copy對象后,深復制就好理解了,內(nèi)存中存在了城舞,兩份獨立對象本身。
5.數(shù)據(jù)持久化存儲方式有哪些寞酿?以及特點家夺?
1.plist 屬性列表 最外層只能存儲數(shù)組字典 里面只能存儲 bool NSNumber String Data Date
2.NSUserDefault 最終也是保存成plist 系統(tǒng)封裝了保存的路徑 保存的方法
3.歸檔 可以對保存數(shù)據(jù)的文件 進行加密
4.sqlite? 關(guān)系型數(shù)據(jù)庫 以表的形式存儲? FMDB是對 OC中 sqlite操作封裝 的第三方庫
5.coreData 是蘋果封裝的 對文件操作的框架 可以 以對象的形式存儲 底層數(shù)據(jù)文件可以是sqlite類型 也可以是XML JSON …
6.談談你對MVC的理解? ?為什么要用MVC?
MVC就是Model-View-Controller的縮寫,M指的是業(yè)務模型,V指的是用戶頁面,C指的是控制器。MVC是架構(gòu)模式,是講M和 V的代碼分離,從而使同那個一個程序可以使用不同的表現(xiàn)形式伐弹。
7. 面向?qū)ο蟮娜齻€基本特征是拉馋?
?封裝、繼承惨好、多態(tài)
8.線程與進程的區(qū)別和聯(lián)系?
線程是進程的基本單位進程和線程都是由操作系統(tǒng)所體會的程序運行的基本單元,系統(tǒng)利用該基本單元實現(xiàn)系統(tǒng)對應用的并發(fā)性煌茴。
進程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式。進程有獨立的地址空間,一個進程崩潰后,在保護模式下get post 不會對其它進程產(chǎn)生影響,而線程只是一個進程中的不同執(zhí)行路徑日川。線程有自己的堆棧和局部變量,但線程之間沒有單獨的 地址空間,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較 大,效率要差一些蔓腐。但對于一些要求同時進行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進程。
9.多線程有幾種方式龄句??
NSTherd回论, NSOperation, GCD
10.檢查內(nèi)存管理問題的方式有哪些分歇?
1)點擊Xcode頂部菜單中的Product Analyze傀蓉。這種方法主要可以查看內(nèi)存泄露,變量未初始化职抡,變量定義后沒有被使用到
2)使用Instrument工具檢查葬燎。點擊Xcode頂部菜單中的Product Profile褂乍,彈出一個界面猾骡,選擇左側(cè)的Memory后,再選右側(cè)的Leaks担猛。
3)人工檢查
11.分類蹄胰,延展岳遥,繼承?
分類:一般用于擴展一個類的方法裕寨,它可以不用創(chuàng)建一個新的類浩蓉,但是不能夠擴充成員變量派继,使用分類重寫本類的方法后無法再調(diào)用原來的方法,使用分類還能夠?qū)⒁粋€類的定義寫在不同的文件內(nèi)捻艳,可以拆分業(yè)務邏輯驾窟,使一個分類的功能更專一。
延展(extension):延展相當于匿名的分類认轨,一般寫在實現(xiàn)文件里面(.m文件)绅络,它可以擴充私有變量和方法,但是變量和方法只能在本文件內(nèi)有效(私有的)嘁字,其他文件不可以調(diào)用恩急。(并且一般不會有人通過延展擴充方法)。
繼承 :使用繼承擴充一個類纪蜒,需要再創(chuàng)建一個子類衷恭,能夠擴充成員變量和方法,可以重寫父類的方法纯续,而且可以通過super調(diào)用父類的方法随珠,但是由于繼承于父類。
12.項目:自適應Cell(流程)
需要自適應cell時猬错,首先要自定義Cell視圖窗看,自定義時最好使用分層的設計,這樣的設計方式可以增加代碼的復用性兔魂,看起來也比較清晰烤芦,更改需求時举娩,代碼的變動也比較小然后肯定要有數(shù)據(jù)模型model,然后還要根據(jù)分層創(chuàng)建對應的frameModel析校,每一個frameModel對應一個Cell的層,使用時通過frameModel給對應的控件frame賦值铜涉,在frameModel內(nèi)部則是智玻,通過最底層的frameModel中的model數(shù)據(jù)傳遞給上層的frameModle模型,直到最后的分層芙代,然后通過數(shù)據(jù)計算相應控件的大小吊奢,然后最上層的frameModel將自己的frame傳遞給下層,這樣一級一級傳遞纹烹,到達最底層的frameModel時就可以計算出所對應的cellHeight页滚。
13.程序構(gòu)架(流程)
寫框架前 要仔細分析各個模塊及控制器之間的跳轉(zhuǎn)和依賴的關(guān)系,比如分析一下看看這幾個控制之間有沒有什么樣的view是可以重用的铺呵,如果有的話裹驰,就不要在第一次使用的這個View是將其和控制器綁定在一塊,可以自定義一個view片挂,以備以后重用時簡便幻林,考慮以后需求修改的可能性贞盯,我感覺最好邏輯比較復雜又有tableview或者collectionView時都是用UIViewController作為底層控制器比較好,只是在上面添加你想用的到View即可沪饺。
14.自定義控件(流程)
自定義控件經(jīng)常是使用躏敢,一般情況下,自定義一個控件首先你要知道這個控件是干嘛用得整葡,它需不需要顯示圖片件余,文字,需不需要點擊遭居,需不需要變動frame等蛾扇,然后根據(jù)響應的需求留下對應的接口,比如點擊一個自定義控件魏滚,那這個控件需要通知控制它被點擊了镀首,簡單情況下如果只有一個button,只需要通知一個控制器鼠次,就可以通過外部定義一個更哄。
15.收藏、最近腥寇?
收藏和最近主要就是使用工具類對數(shù)據(jù)進行增加和刪除成翩,保存數(shù)據(jù)時要重寫數(shù)據(jù)的equalto方法(因為計算機是根據(jù)內(nèi)存地址比較的,而有時候內(nèi)存地址雖然不同赦役,但是儲存的數(shù)據(jù)確實一樣的麻敌,所以一般根據(jù)數(shù)據(jù)的位置標識(例如id值)比較)
如果是做最近,就需要將上一次的數(shù)據(jù)刪除掂摔,添加新的數(shù)據(jù)進來术羔,如果在搜藏是需要記錄控件的編輯和選中狀態(tài),就需要在數(shù)據(jù)模型中添加相應的屬性乙漓,利用數(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.推送流程嚼贡?
一般意義上說推送就是指遠程推送,本地推送一般可以用來提示長時間未進入應用的用戶同诫,也可以用來做鬧鈴粤策。
(一個程序可以推送,首先你要向蘋果公司注冊推送證書)
下面詳細說一下遠程推送的流程:
1.當你的程序需要推送時剩辟,通過UIApplication中的registerUserNotification注冊遠程推送掐场,注冊后往扔,你的程序會通過iOS系統(tǒng)向APNs服務器請求,APNs服務器接到請求后會將請求設備的device token(設備令牌)發(fā)送回你的應用熊户,在UIApplication的代理方法中可以接收到device token萍膛,如果請求失敗也會通過代理方法返回錯誤信息。
2.當應用程序拿到device token后嚷堡,就可以將device token回傳給應用提供商服務器蝗罗,服務器就知道了這臺設備可以推送消息了,然后將device token儲存在服務器內(nèi)部蝌戒,device token的生成算法只有蘋果公司才知道串塑,所以為了防止蘋果修改算法造成推送失敗,最好每次啟動程序時都請求一次device token北苟,在device token發(fā)生改變時桩匪,告訴服務器新的device token。
(推送一般情況下是程序提供商向用戶推送一些最新的消息或者資訊友鼻,不過比如QQ,微信等可以在離線的情況下進行消息的提醒傻昙,下面以qq推送離線消息為例,相比從服務器推送彩扔,qq離線消息的推送是由客戶端編輯信息的)妆档。
3.現(xiàn)在如果程序要推送消息了,就可以將消息和要發(fā)送的對象的賬號發(fā)送給程序提供商服務器虫碉,服務器會通過你要推送的對象的賬號信息找到對應綁定的device token贾惦,然后將推送消息內(nèi)容和device token傳給APNs服務器。
4.APNs服務器在接收到消息內(nèi)容和device token后會查找已注冊的設備然后將對應的信息和device token推送到指定的設備上敦捧,設備通過device token中的app id找到要推送的app须板,然后信息會按照app的推送設置顯示信息。
推送流程:
deviceToken:包括appID和UDID绞惦。手機在聯(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.導入AlipaySDK.bundle? ?AlipaySDK.framework 系統(tǒng)庫SystemConfiguration.framework
2.導入頭文件 #import
3.info.plist注冊scheme
4.配置請求Order信息
《1》將商品信息拼接成字符串
《2》獲取私鑰并簽名商戶信息
《3》生成訂單
5.設置回調(diào)方法
微信
1.開放平臺申請帳號 并開通支付功能
2.導入SDK 添加依賴庫
3.后臺生成訂單 開始支付
4.用戶確認信息輸入密碼
5.支付完成 跳回app
銀聯(lián)
UPPayPlugin無卡交易
UPPayPluginPro無卡交易和VIPOS音頻口支付
需要把.m改成.mm
1.添加SDK包 添加系統(tǒng)庫
2.服務器準備交易流水號
3.startPay 開始支付
4.設置回調(diào)方法 ?