1、copy,weak,assign,strong,retain 都有什么區(qū)別,應(yīng)用在什么地方
????????assign :一般應(yīng)用于基礎(chǔ)類型,oc的基本數(shù)據(jù)類型NSInteger、CGFloat。C的數(shù)據(jù)類型int、float、????????????double、 ?char、等還用于委托設(shè)計(jì)模式,防止循環(huán)引用,不會(huì)更改計(jì)數(shù)器
? ? ? ? retain:保留計(jì)數(shù),獲得到了對(duì)象的所有權(quán),引用計(jì)數(shù)在原有基礎(chǔ)上+1
? ? ? ? copy:建立一個(gè)索引計(jì)數(shù)為1的對(duì)象,然后釋放舊對(duì)象 。用來(lái)復(fù)制對(duì)象,一般字符串用copy,F(xiàn)oundation中不可變對(duì)象使用copy效果相當(dāng)于retain,只是引用計(jì)數(shù)+1.
????????strong:(強(qiáng)引用)告訴編譯器自動(dòng)幫我們插入retain,
????????weak:(弱引用)是普通賦值相當(dāng)于手動(dòng)管理內(nèi)存的assign。
?? ? ? ?assign和retain的區(qū)別:assign就是直接賦值,從而可能引起1中的問題,當(dāng)數(shù)據(jù)為int, float等原生類型時(shí),可以使用assign。retain就如2中所述,使用了引用計(jì)數(shù),retain引起引用計(jì)數(shù)加1,?release引起引用計(jì)數(shù)減1,當(dāng)引用計(jì)數(shù)為0時(shí),dealloc函數(shù)被調(diào)用,內(nèi)存被回收。
????????copy和retain:copy是創(chuàng)建一個(gè)新對(duì)象,copy是在你不希望a和b共享一塊內(nèi)存時(shí)會(huì)使用到。a和b各自有自己的內(nèi)存,retain是創(chuàng)建一個(gè)指針,引用對(duì)象計(jì)數(shù)加1。Copy屬性表示兩個(gè)對(duì)象內(nèi)容相同,新的對(duì)象retain count為1?,與舊有對(duì)象的引用計(jì)數(shù)無(wú)關(guān),舊有對(duì)象沒有變化。copy減少對(duì)象對(duì)上下文的依賴。retain屬性表示兩個(gè)對(duì)象地址相同(建立一個(gè)指針,指針拷貝),內(nèi)容當(dāng)然相同,這個(gè)對(duì)象的retain值+1也就是說(shuō),retain?是指針拷貝,copy?是內(nèi)容拷貝。這里指的是NSString,NSNumber等等一類的對(duì)象。
? ??????weak 和strong的區(qū)別:不同的是 當(dāng)一個(gè)對(duì)象不再有strong類型的指針指向它的時(shí)候 它會(huì)被釋放 ?,即使還有weak型指針指向它。一旦最后一個(gè)strong型指針離去 ,這個(gè)對(duì)象將被釋放,所有剩余的weak型指針都將被清除。
????????retain和strong的區(qū)別:在處理用strong聲明的Block屬性引發(fā)的問題時(shí)偶然發(fā)現(xiàn)的。在諸多教程中都會(huì)講到:聲明屬性時(shí)用strong或者retain效果是一樣的(貌似更多開發(fā)者更傾向于用strong)。不過(guò)在聲明Block時(shí),使用strong和retain會(huì)有截然不同的效果。strong會(huì)等于copy,而retain竟然等于assign!當(dāng)然定義Block還是應(yīng)該用copy,因?yàn)榉茿RC下不copy的Block會(huì)在棧中,ARC中的Block都會(huì)在堆上的。
? ??????assign和weak的區(qū)別:weak只可以修飾對(duì)象,assign既可以修飾對(duì)象也可以修飾基本數(shù)據(jù)類型,如int、double和NSIntegerdeng 。weak不會(huì)產(chǎn)生野指針問題,assign可能導(dǎo)致野指針問題,導(dǎo)致程序崩潰。
????????block和weak區(qū)別:__block不管是ARC還是MRC模式下都可以使用,可以修飾對(duì)象,還可以修飾基本數(shù)據(jù)類型。__weak只能在ARC模式下使用,也只能修飾對(duì)象(NSString),不能修飾基本數(shù)據(jù)類型(int)。block對(duì)象可以在block中被重新賦值,weak不可以。
2、深拷貝和淺拷貝
????????淺拷貝就是拷貝后,并沒有進(jìn)行真正的復(fù)制,而是復(fù)制的對(duì)象和原對(duì)象都指向同一個(gè)地址
????????深拷貝是真正的復(fù)制了一份,復(fù)制的對(duì)象指向了新的地址
3、響應(yīng)事件是怎么傳遞的
????????1.觸摸屏幕產(chǎn)生觸摸事件后,觸摸事件會(huì)被添加到由UIApplication管理的事件隊(duì)列中(即,首先接收到事件的是UIApplication)。
????????2.UIApplication會(huì)從事件隊(duì)列中取出最前面的事件,把事件傳遞給應(yīng)用程序的主窗口(keyWindow)。
????????3.主窗口會(huì)在視圖層次結(jié)構(gòu)中找到一個(gè)最合適的視圖來(lái)處理觸摸事件。(至此,第一步已完成)
????????4.最合適的view會(huì)調(diào)用自己的touches方法處理事件
????????5.touches默認(rèn)做法是把事件順著響應(yīng)者鏈條向上拋。
? ? ? ??事件的傳遞和響應(yīng)的區(qū)別:事件的傳遞是從上到下(父控件到子控件),事件的響應(yīng)是從下到上(順著響應(yīng)者鏈條向上傳遞:子控件到父控件。
4、內(nèi)購(gòu)流程
? ? 1.判斷內(nèi)購(gòu)權(quán)限
? ? 2.獲得產(chǎn)品購(gòu)買列表
? ? 3.注冊(cè)內(nèi)購(gòu)監(jiān)聽
? ? 4.實(shí)現(xiàn)內(nèi)購(gòu)監(jiān)聽
? ? 5.發(fā)起內(nèi)購(gòu)請(qǐng)求
? ? 6.解析內(nèi)購(gòu)數(shù)據(jù)
? ?校驗(yàn):
????1.產(chǎn)品標(biāo)識(shí)符: product Identifier
????????在itunes store應(yīng)用內(nèi)定義的產(chǎn)品ID,例如com.公司名.產(chǎn)品名.道具名(com.xxxx.video.vip)
????2.交易狀態(tài): state
????????Purchased購(gòu)買成功
????????Restored恢復(fù)購(gòu)買
????????Failed失敗
????????Deferred等待確認(rèn),兒童模式需要詢問家長(zhǎng)同意
? ??3. Receipt
????????很長(zhǎng)的一段字符串,大概49行,作為二次驗(yàn)證的重要依據(jù)
? ??4. 交易標(biāo)識(shí)符: transaction Identifier
????????我們需要把Receipt發(fā)送給蘋果的蘋果的服務(wù)器驗(yàn)證,用戶的購(gòu)買信息是否真實(shí)
????????驗(yàn)證服務(wù)器地址
????????在測(cè)試服務(wù)器中,發(fā)送receipt蘋果的測(cè)試服務(wù)器(https://sandbox.itunes.apple.com/verifyReceipt)驗(yàn)證
? ? ? ? 在正式服務(wù)器中(已上線Appstore),發(fā)送receipt到蘋果的正式服務(wù)器(https://buy.itunes.apple.com/verifyReceipt)驗(yàn)證
5、ios本地存儲(chǔ)分為幾種?都是什么?具體作用?
? ? ? ?1. 應(yīng)用沙盒
? ??????Document:適合存儲(chǔ)重要的數(shù)據(jù), iTunes同步應(yīng)用時(shí)會(huì)同步該文件下的內(nèi)容,(比如游戲中的存檔)
????????Library/Caches:適合存儲(chǔ)體積大,不需要備份的非重要數(shù)據(jù),iTunes不會(huì)同步該文件
????????Library/Preferences:通常保存應(yīng)用的設(shè)置信息, iTunes會(huì)同步
????????tmp:保存應(yīng)用的臨時(shí)文件,用完就刪除,系統(tǒng)可能在應(yīng)用沒在運(yùn)行時(shí)刪除該目錄下的文件,iTunes不會(huì)同步
獲取沙盒路徑Document:NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString*documentFilePath = paths.firstObject;
6、多線程會(huì)用那些,都用什么區(qū)別
? ??????NSThread?面向?qū)ο蟮模枰绦騿T手動(dòng)創(chuàng)建線程,但不需要手動(dòng)銷毀。子線程間通信很難。
? ??????GCD?c語(yǔ)言,充分利用了設(shè)備的多核,自動(dòng)管理線程生命周期。比NSOperation效率更高。
? ??????NSOperation?基于gcd封裝,更加面向?qū)ο螅萭cd多了一些功能。兩個(gè)概念:操作(NSOperation)和隊(duì)列(NSOperationQueue)
7、block底層原理是什么
????????block本質(zhì)上也是一個(gè)OC對(duì)象,它內(nèi)部也有個(gè)isa指針
????????block是封裝了函數(shù)調(diào)用以及函數(shù)調(diào)用環(huán)境的OC對(duì)象
????????block是封裝函數(shù)及其上下文的OC對(duì)象
8、數(shù)據(jù)存儲(chǔ)都有什么區(qū)別
? ??沙盒的的根目錄有三個(gè)文件夾:Documents,Library,tmp
引用?http://www.lxweimin.com/p/f6871fff04b0
9、堆和棧的區(qū)別
????????因?yàn)椋篛bjective-C的對(duì)象在內(nèi)存中是以堆的方式分配空間的,并且堆內(nèi)存是由你釋放的,就是release OC對(duì)象存放于堆里面(堆內(nèi)存要程序員手動(dòng)回收)非OC對(duì)象一般放在棧里面(棧內(nèi)存會(huì)被系統(tǒng)自動(dòng)回收)堆里面的內(nèi)存是動(dòng)態(tài)分配的,所以也就需要程序員手動(dòng)的去添加內(nèi)存、回收內(nèi)存
按管理方式分
????????對(duì)于棧來(lái)講,是由系統(tǒng)編譯器自動(dòng)管理,不需要程序員手動(dòng)管理
????????對(duì)于堆來(lái)講,釋放工作由程序員手動(dòng)管理,不及時(shí)回收容易產(chǎn)生內(nèi)存泄露
按分配方式分
????????堆是動(dòng)態(tài)分配和回收內(nèi)存的,沒有靜態(tài)分配的堆
????????棧有兩種分配方式:靜態(tài)分配和動(dòng)態(tài)分配
????????靜態(tài)分配是系統(tǒng)編譯器完成的,比如局部變量的分配
????????動(dòng)態(tài)分配是有alloc函數(shù)進(jìn)行分配的,但是棧的動(dòng)態(tài)分配和堆是不同的,它的動(dòng)態(tài)分配也由系統(tǒng)編譯器進(jìn)行釋放,不需要程序員手動(dòng)管理
????????棧是吃了吐 堆是吃了拉
10、動(dòng)畫效果都有什么方式,有什么區(qū)別
????1、CABasicAnimation基本動(dòng)畫(fromValue和toValue)
? ? 2、CAKeyframeAnimation關(guān)鍵幀動(dòng)畫:
? ? 3、UIView 代碼塊調(diào)用:
引用 ?http://www.lxweimin.com/p/9a66dbc232e1