
一. 請(qǐng)簡(jiǎn)述iOS中Push原理
第一階段:應(yīng)用程序把要發(fā)送的消息 目的iPhone的標(biāo)識(shí)打包,發(fā)給APNS.
第二階段:APNS在自身的已注冊(cè)Push服務(wù)的iPhone列表中,查找 有相應(yīng)標(biāo)識(shí)的iPhone,并把消息發(fā)送到iPhone.
第三階段:iPhone把發(fā)來的消息傳遞給相應(yīng)的應(yīng)用程序,并且按照設(shè)定彈出Push通知
二. iOS7和iOS7以下常見的兼容性問題和解決方法?
- baseline
原因:autolayout自動(dòng)加了baseline的constraints,而baseline只有iOS8以后才有,兼容iOS7就崩潰了
解決:直接移除baseline相關(guān)的constraint即可。 - [[UINavigationBar appearance] setTranslucent:NO]
原因iOS8.0之后[UINavigationBar appearance]才可以setTranslucent,兼容iOS7需要添加判斷
解決:兼容iOS7需要添加判斷
if(IOS8_OR_LATER && [UINavigationBar conformsToProtocol:@protocol(UIAppearanceContainer)]) {
[[UINavigationBar appearance] setTranslucent:NO];
}
storyboard segue show
原因:在iOS7下如果沒有設(shè)置navigationController為initController,show會(huì)自動(dòng)將push轉(zhuǎn)換成modal。簡(jiǎn)而言之就是在sb里每個(gè)show的segue
解決:保證它的初始位置有個(gè)navigationController。constrain to margin
原因:這是設(shè)置了constrain to margins的關(guān)系,這玩意也是iOS8后才有的scrollerView
原因:找不到setAutomaticallyAdjustsScrollViewInsets:方法
解決:重寫方法setAutomaticallyAdjustsScrollViewInsets:
三. 怎么用 copy 關(guān)鍵字
一般使用retain或者strong修飾屬性時(shí),是使用引用對(duì)象的指針指向同一對(duì)象,即為同一塊內(nèi)存地址.只要其中有一個(gè)指針變量被修飾時(shí)所有其他引用該對(duì)象的變量都會(huì)被改變
而使用copy關(guān)鍵字修飾在賦值時(shí)是釋放舊對(duì)象,拷貝新對(duì)象內(nèi)容.重新分配了內(nèi)存地址.以后該指針變量被修改時(shí)就不會(huì)影響舊對(duì)象的內(nèi)容了.
copy只有實(shí)現(xiàn)了NSCopying協(xié)議的對(duì)象類型才有效,常用于NSString和Block
四. 這個(gè)寫法會(huì)出什么問題
@@property (copy) NSMutableArray *array;
當(dāng)一個(gè)NSMutableArray對(duì)象使用initWithArray: 初始化方法創(chuàng)建時(shí),并將該對(duì)象賦值給了array屬性。那么之后array執(zhí)行可變數(shù)組的方法,如: removeObjectAtIndex: 時(shí)會(huì)出現(xiàn)unrecognized selector sent to instance的崩潰。原因在于array屬性在被賦值(setter)的時(shí)候默認(rèn)執(zhí)行了copy方法后變?yōu)榱瞬豢勺僋SArray對(duì)象。
五. 如何讓自己的類用 copy 修飾符?如何重寫帶 copy 關(guān)鍵字的 setter?
該類必須要實(shí)現(xiàn)NSCopying協(xié)議。實(shí)現(xiàn) - (id)copyWithZone:(NSZone *)zone; 方法。
重寫copy關(guān)鍵字的setter時(shí),需要調(diào)用一下傳入對(duì)象的copy方法。然后賦值給該setter的方法對(duì)應(yīng)的成員變量。
六. 怎樣防止指針的越界使用問題?
- 防止數(shù)組越界,必須讓指針指向一個(gè)有效的內(nèi)存地址,
- 防止向一塊內(nèi)存中拷貝過多的內(nèi)容
- 防止使用空指針
- 防止改變const修改的指針
- 防止改變指向靜態(tài)存儲(chǔ)區(qū)的內(nèi)容
- 防止兩次釋放一個(gè)指針
- 防止使用野指針
七. http請(qǐng)求方式有哪些?
- GET
- HEAD
- PUT
- DELETE
- POST
- OPTIONS
八. 屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那種情況下用?
- readwrite 是可讀可寫特性;需要生成getter方法和setter方法時(shí)
- readonly 是只讀特性 只會(huì)生成getter方法 不會(huì)生成setter方法 ;不希望屬性在類外改變
- assign 是賦值特性,setter方法將傳入?yún)?shù)賦值給實(shí)例變量;僅設(shè)置變量時(shí);
- retain 表示持有特性,setter方法將傳入?yún)?shù)先保留,再賦值,傳入?yún)?shù)的retaincount會(huì)+1;
- copy 表示賦值特性,setter方法將傳入對(duì)象復(fù)制一份;需要完全一份新的變量時(shí)。
- nonatomic 非原子操作,決定編譯器生成的setter getter是否是原子操作,atomic表示多線程安全,
一般使用nonatomic
九. http 的post與get區(qū)別與聯(lián)系,實(shí)踐中如何選擇它們?
- get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傳送數(shù)據(jù).
- get方式提交數(shù)據(jù)最多只能有1kB,而POST一般沒有限制.
- 安全性問題,使用get參數(shù)會(huì)在URL中,而pot不會(huì),所以用戶輸入的數(shù)據(jù)包含敏感數(shù)據(jù)用post.
十. 檢查內(nèi)存管理問題的方式有哪些?
Xcode自帶檢測(cè)工具.
純手動(dòng) 有地方是個(gè)人理解 有誤的地方希望大家能給指出 謝謝
大家面試中遇到的問題 也可以留言分享
如果您喜歡 或者對(duì)您有點(diǎn)幫助 希望點(diǎn)一下喜歡 謝謝了~~