1.在某個(gè)方法中 self.name = _name,name = _name 它 們有區(qū)別嗎,為什么?
前者是存在內(nèi)存管理的setter方法賦值,它會(huì)對(duì)_name對(duì)象進(jìn)行保留或者拷貝操作
后者是普通賦值
一般來(lái)說(shuō),在對(duì)象的方法里成員變量和方法都是可以訪(fǎng)問(wèn)的,我們通常會(huì)重寫(xiě)Setter方法來(lái)執(zhí)行某些額外的工作。比如說(shuō),外部傳一個(gè)模型過(guò)來(lái),那么我會(huì)直接重寫(xiě)Setter方法,當(dāng)模型傳過(guò)來(lái)時(shí),也就是意味著數(shù)據(jù)發(fā)生了變化,那么視圖也需要更新顯示,則在賦值新模型的同時(shí)也去刷新UI。
2.定義屬性時(shí),什么時(shí)候用 assign、retain、copy 以及它們的之間的區(qū)別?
assign:普通賦值,一般常用于基本數(shù)據(jù)類(lèi)型,常見(jiàn)委托設(shè)計(jì)模式, 以此來(lái)防止循環(huán)引用。(我們稱(chēng)之為弱引用).
retain:保留計(jì)數(shù),獲得到了對(duì)象的所有權(quán),引用計(jì)數(shù)在原有基礎(chǔ)上加1.
copy:一般認(rèn)為,是在內(nèi)存中重新開(kāi)辟了一個(gè)新的內(nèi)存空間,用來(lái) 存儲(chǔ)新的對(duì)象,和原來(lái)的對(duì)象是兩個(gè)不同的地址,引用計(jì)數(shù)分別為1。但是當(dāng)copy對(duì)象為不可變對(duì)象時(shí),那么copy 的作用相當(dāng)于retain。因?yàn)?這樣可以節(jié)約內(nèi)存空間
3.NSNotification、Block、Delegate和KVO的區(qū)別?
代理是一種回調(diào)機(jī)制,且是一對(duì)一的關(guān)系,通知是一對(duì)多的關(guān)系,一個(gè)對(duì)向所有的觀察者提供變更通知;
效率:Delegate比NSNOtification高;
Delegate和Block一般是一對(duì)一的通信;
Delegate需要定義協(xié)議方法,代理對(duì)象實(shí)現(xiàn)協(xié)議方法,并且需要建立代理關(guān)系才可以實(shí)現(xiàn)通信;
Block:Block更加簡(jiǎn)潔,不需要定義繁瑣的協(xié)議方法,但通信事件比較多的話(huà),建議使用Delegate;
4.static、self、super關(guān)鍵字的作用?
函數(shù)體內(nèi)static變量的作用范圍為該函數(shù)體,不同于auto變量,該變量的內(nèi)存只被分配一次,因此其值在下次調(diào)用時(shí)仍維持上次的值.
在模塊內(nèi)的 static 全局變量可以被模塊內(nèi)所用函數(shù)訪(fǎng)問(wèn),但不能被模塊外其它函數(shù)訪(fǎng)問(wèn).
在模塊內(nèi)的static函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用,這個(gè)函數(shù)的使用范圍被限制在聲明.
在類(lèi)中的static成員變量屬于整個(gè)類(lèi)所擁有,對(duì)類(lèi)的所有對(duì)象只有一份拷貝.
self:當(dāng)前消息的接收者。
super:向父類(lèi)發(fā)送消息。
5.#include與#import的區(qū)別、#import 與@class 的區(qū)別?
include 和#import其效果相同,都是查詢(xún)類(lèi)中定義的行為(方法);
import不會(huì)引起交叉編譯,確保頭文件只會(huì)被導(dǎo)入一次;
@class 的表明,只定 義了類(lèi)的名稱(chēng),而具體類(lèi)的行為是未知的,一般用于.h 文件;
@class 比#import 編譯效率更高。
此外@class 和#import 的主要區(qū)別在于解決引用死鎖的問(wèn)題。
6.解釋self = [super init]方法?
容錯(cuò)處理,當(dāng)父類(lèi)初始化失敗,會(huì)返回一個(gè)nil,表示初始化失敗。由于繼承的關(guān)系,子類(lèi)是需要擁有父類(lèi)的實(shí)例和行為,因此,我們必須先初始化父類(lèi),然后再初始化子類(lèi)
7.HTTP協(xié)議的特點(diǎn),關(guān)于HTTP請(qǐng)求GET和POST的區(qū)別?
HTTP超文本傳輸協(xié)議,是短連接,是客戶(hù)端主動(dòng)發(fā)送請(qǐng)求,服務(wù)器做出響應(yīng),服務(wù)器響應(yīng)之后,鏈接斷開(kāi)。HTTP是一個(gè)屬于應(yīng)用層面向?qū)ο蟮膮f(xié)議,HTTP有兩類(lèi)報(bào)文:請(qǐng)求報(bào)文和響應(yīng)報(bào)文。
HTTP請(qǐng)求報(bào)文:一個(gè)HTTP請(qǐng)求報(bào)文由請(qǐng)求行、請(qǐng)求頭部、空行和請(qǐng)求數(shù)據(jù)4部分組成。
HTTP響應(yīng)報(bào)文:由三部分組成:狀態(tài)行、消息報(bào)頭、響應(yīng)正文。
GET和POST的區(qū)別:
GET請(qǐng)求:參數(shù)在地址后拼接,沒(méi)有請(qǐng)求數(shù)據(jù),不安全(因?yàn)樗袇?shù)都拼接在地址后面),不適合傳輸大量數(shù)據(jù)(長(zhǎng)度有限制,為1024個(gè)字節(jié))。
GET提交、請(qǐng)求的數(shù)據(jù)會(huì)附在URL之后,即把數(shù)據(jù)放置在HTTP協(xié)議頭中。 以?分割URL和傳輸數(shù)據(jù),多個(gè)參數(shù)用&連接。如果數(shù)據(jù)是英文字母或數(shù)字,原樣發(fā)送, 如果是空格,轉(zhuǎn)換為+,如果是中文/其他字符,則直接把字符串用BASE64加密。
POST請(qǐng)求:參數(shù)在請(qǐng)求數(shù)據(jù)區(qū)放著,相對(duì)GET請(qǐng)求更安全,并且數(shù)據(jù)大小沒(méi)有限制。把提交的數(shù)據(jù)放置在HTTP包的包體中.
GET提交的數(shù)據(jù)會(huì)在地址欄顯示出來(lái),而POST提交,地址欄不會(huì)改變。
傳輸數(shù)據(jù)的大?。?/p>
GET提交時(shí),傳輸數(shù)據(jù)就會(huì)受到URL長(zhǎng)度限制,POST由于不是通過(guò)URL傳值,理論上書(shū)不受限。
安全性:
POST的安全性要比GET的安全性高;
通過(guò)GET提交數(shù)據(jù),用戶(hù)名和密碼將明文出現(xiàn)在URL上,比如登陸界面有可能被瀏覽器緩存。
HTTPS:安全超文本傳輸協(xié)議(Secure Hypertext Transfer Protocol),它是一個(gè)安全通信通道,基于HTTP開(kāi)發(fā),用于客戶(hù)計(jì)算機(jī)和服務(wù)器之間交換信息,使用安全套結(jié)字層(SSI)進(jìn)行信息交換,即HTTP的安全版。
8.ASIHttpRequest、AFNetWorking之間的區(qū)別
ASIHttpRequest功能強(qiáng)大,主要是在MRC下實(shí)現(xiàn)的,是對(duì)系統(tǒng)CFNetwork API進(jìn)行了封裝,支持HTTP協(xié)議的CFHTTP,配置比較復(fù)雜,并且ASIHttpRequest框架默認(rèn)不會(huì)幫你監(jiān)聽(tīng)網(wǎng)絡(luò)改變,如果需要讓ASIHttpRequest幫你監(jiān)聽(tīng)網(wǎng)絡(luò)狀態(tài)改變,并且手動(dòng)開(kāi)始這個(gè)功能。
AFNetWorking構(gòu)建于NSURLConnection、NSOperation以及其他熟悉的Foundation技術(shù)之上。擁有良好的架構(gòu),豐富的API及模塊構(gòu)建方式,使用起來(lái)非常輕松。它基于NSOperation封裝的,AFURLConnectionOperation子類(lèi)。
ASIHttpRequest是直接操作對(duì)象ASIHttpRequest是一個(gè)實(shí)現(xiàn)了NSCoding協(xié)議的NSOperation子類(lèi);AFNetWorking直接操作對(duì)象的AFHttpClient,是一個(gè)實(shí)現(xiàn)NSCoding和NSCopying協(xié)議的NSObject子類(lèi)。
同步請(qǐng)求:ASIHttpRequest直接通過(guò)調(diào)用一個(gè)startSynchronous方法;AFNetWorking默認(rèn)沒(méi)有封裝同步請(qǐng)求,如果開(kāi)發(fā)者需要使用同步請(qǐng)求,則需要重寫(xiě)getPath:paraments:success:failures方法,對(duì)于AFHttpRequestOperation進(jìn)行同步處理。
性能對(duì)比:AFNetworking請(qǐng)求優(yōu)于ASIHttpRequest;
9.UIViewController的完整生命周期
-[ViewController initWithNibName:bundle:];
-[ViewController init];
-[ViewController loadView];
-[ViewController viewDidLoad];
-[ViewController viewWillAppear:];
-[ViewController viewDidAppear:];
-[ViewController viewWillDisappear:];
-[ViewController viewDidDisappear:];