iOS面試

循環(huán)引用:
http://ios.jobbole.com/82077/
類別的作用
功能:
1.擴充現(xiàn)有類的功能
2.對現(xiàn)有類進行模塊化的設計
3.聲明非正式的協(xié)議
4.匿名分類(@interface 類名 () @end),一般在依賴類的.m文件的最上面生成匿名分類,專門用來聲明私有的屬性和方法
5.調(diào)用私有方法
延展的功能
為自己添加私有的方法,可以不用創(chuàng)建文件,直接在m文件中申明,但是必須實現(xiàn),即使創(chuàng)建文件也只有h文件
類別與延展的關系
1.延展是匿名的類別
2.延展添加的是私有方法,延展的方法必須在對應的m文件中實現(xiàn),而類別不用
3.延展可以添加屬性,分類不行
類別使用注意:
1.類別可以訪問原始類的實例變量,但是不能添加實例變量,如果想添加只有通過繼承創(chuàng)建子類來實現(xiàn)。
2.類別可以重載原始類方法,這樣會覆蓋原始類的方法,不推薦使用,即使要實現(xiàn),可以通過繼承創(chuàng)建子類實現(xiàn)
3.類別的方法,只要你不掉用他,可以不用實現(xiàn)
什么是延遲加載(懶加載)?
懶加載即重寫get方法,此方法多用于已有的數(shù)據(jù)加載方法,加載數(shù)據(jù)后賦值給數(shù)組.
char const p
如果const位于的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;
如果const位于*的右側,const就是修飾指針本身,即指針本身是常量。
數(shù)據(jù)的持久性存儲
1.屬性列表 主要涉及到NSUserDefaults 用于存儲配置信息
2.對象歸檔 使用基本對象類型定制個性化緩存
3數(shù)據(jù)庫存儲(SQLite) 用于存儲查詢需求較多的數(shù)據(jù)
4Core Data 。 用于規(guī)劃應用中的對象
數(shù)據(jù)請求方法:
NSURLConnection 系統(tǒng)的,常用的方式
NSURLSession 系統(tǒng)的,ios7.0之后出現(xiàn)的,使用了Block,提高了效率
ASIHttpRequest 第三方的,原來經(jīng)常使用的數(shù)據(jù)請求庫,缺點:環(huán)境是mrc,要進行ARC與MRC之間的轉化,沒有使用block
AFNetworking 第三方的,現(xiàn)在被經(jīng)常使用,內(nèi)部集成了NSURLConnection和NSURLSession,環(huán)境是ARC,使用了Block,提高了效率,不用系統(tǒng)庫的支撐
程序的生命周期
application didFinishLaunchingWithOptions:開始
applicationWillResignActive:變成不活躍
applicationDidEnterBackground:進入后臺
applicationWillEnterForeground:進入前臺
applicationDidBecomeActive:變成活躍
applicationWillTerminate:即將關閉

視圖控制器的生命周期
1.initWithNibName: //初始化方法(一次初始化) 通常用xib創(chuàng)建對象時進行的初始化工作放在這里
2.init //初始化方法(一次初始化方法) 通常用純代碼創(chuàng)建對象的時候調(diào)用
loadView //加載視圖(初始化方法)
viewDidLoad //二次初始化方法(純代碼,xib創(chuàng)建對象都要調(diào)用)
viewWillAppear:(BOOL)animated //視圖將要出現(xiàn)
viewDidAppear:(BOOL)animated //視圖已經(jīng)出現(xiàn)
viewWillDisappear:(BOOL)animated//視圖將要消失
viewDidDisappear:(BOOL)animated //視圖已經(jīng)消失
堆和棧的區(qū)別:
  一、堆棧空間分配區(qū)別:
  1、棧(操作系統(tǒng)):由操作系統(tǒng)自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結構中的棧;
  2、堆(操作系統(tǒng)): 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收,分配方式倒是類似于鏈表。
  二、堆棧緩存方式區(qū)別:
  1、棧使用的是一級緩存, 他們通常都是被調(diào)用時處于存儲空間中,調(diào)用完畢立即釋放;
  2、堆是存放在二級緩存中,生命周期由虛擬機的垃圾回收算法來決定(并不是一旦成為孤兒對象就能被回收)。所以調(diào)用這些對象的速度要相對來得低一些。
  三、堆棧數(shù)據(jù)結構區(qū)別:
  堆(數(shù)據(jù)結構):堆可以被看成是一棵樹,如:堆排序;
  棧(數(shù)據(jù)結構):一種先進后出的數(shù)據(jù)結構。
1.static靜態(tài)變量的作用
答:1.表示全局靜態(tài),用來修飾成員變量和成員方法

2.被修飾的變量和方法獨立于該類的任何對象,即它不依賴類特定實例,被類的所有實例共享

3.靜態(tài)方法可以直接通過類名調(diào)用,任何實例也可調(diào)用。
4.靜態(tài)變量可以不進行外置聲明,直接調(diào)用,使用靜態(tài)方法,不用實例化,創(chuàng)建類的對象,使方法調(diào)用方便,節(jié)省空間
5.static成員是不能被其所在class創(chuàng)建的實例訪問的,其默認值是0,只要執(zhí)行一次,運行時開辟全局內(nèi)存空間,存儲上一次數(shù)據(jù),便于下次調(diào)用,對于實例變量,沒創(chuàng)建一個實例,就會為實例變量分配一次內(nèi)存,實例變量可以在內(nèi)存中有多個拷貝,互不影響(靈活)。
2.get和post使用時的區(qū)別
答:1.get是從服務器上去獲取數(shù)據(jù),post是向服務器傳輸數(shù)據(jù)(一般是用于圖片的傳輸)
2.. get是把參數(shù)數(shù)據(jù)隊列加到提交表單的ACTION屬性所指的URL中,值和表單內(nèi)各個字段一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內(nèi)各個字段與其內(nèi)容放置在HTML HEADER內(nèi)一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。

  1. 對于get方式,服務器端用Request.QueryString獲取變量的值,對于post方式,服務器端用Request.Form獲取提交的數(shù)據(jù)。

  2. get傳送的數(shù)據(jù)量較小。post傳送的數(shù)據(jù)量較大,一般被默認為不受限制。

  3. get安全性非常低,post安全性較高。但是執(zhí)行效率卻比Post方法好。

建議:
1、get方式的安全性較Post方式要差些,包含機密信息的話,建議用Post數(shù)據(jù)提交方式;
2、在做數(shù)據(jù)查詢時,建議用Get方式;而在做數(shù)據(jù)添加、修改或刪除時,建議用Post方式;
3.@class和#import的區(qū)別
1.#import包含被引用類所有的信息,被引用類的變量和方法;@class是前向聲明,只是告訴編譯器在某一個類的.h文件中聲明另一個類,沒有聲明具體信息。
2.使用@class只需要被引用類的名稱,在.m文件使用#import來包含被引用類的頭文件,因為實現(xiàn)類時需要用到被引用類的實體變量和方法。

bundle(沙盒):一個應用只能在自己的沙盒中讀取或存儲文件,而不能操作其他沙盒中的文件。好處:保護應用的隱私不受侵犯,保護系統(tǒng)文件的安排,應用刪除后相關文件也能被全部清除。
每個應用都有自己的沙盒,沙盒的根目錄的獲取方法是NSHomeDirectory()。
根目錄下的內(nèi)容:
-.app文件,實際上是一個文件夾,包含了可執(zhí)行文件、Nib文件、圖片資源、plist等。XCode中能看到的資源,及編譯后的可執(zhí)行文件,都封裝在app中。
-Documents文件夾,用于存放你的應用所產(chǎn)生的數(shù)據(jù),該文件夾可通過iTunes備份,可以存儲游戲進度等。
-Library文件夾,用于存放用戶偏好和臨時文件。
-tmp文件夾是系統(tǒng)的中轉站。
自動釋放池是什么,如何工作
當您向一個對象發(fā)送一個autorelease 消息時,Cocoa就會將該對象的一個引用放入到最新的自動釋放池。它仍然是個正當?shù)膶ο螅虼俗詣俞尫懦囟x的作用域內(nèi)的其它對象可以向它發(fā)送消息。當 程序執(zhí)行到作用域結束的位置時,自動釋放池就會被釋放,池中的所有對象也就被釋放。
ojc-c 是 通過一種"referring counting"(引用計數(shù))的方式來管理內(nèi)存的, 對象在開始分配內(nèi)存(alloc)的時候引用計數(shù)為一,以后每當碰到有copy,retain的時候引用計數(shù)都會加一, 每當碰到release和autorelease的時候引用計數(shù)就會減一,如果此對象的計數(shù)變?yōu)榱?, 就會被系統(tǒng)銷毀.
NSAutoreleasePool 就是用來做引用計數(shù)的管理工作的,這個東西一般不用你管的. 3. autorelease和release沒什么區(qū)別,只是引用計數(shù)減一的時機不同而已,autorelease會在對象的使用真正結束的時候才做引用計數(shù)減一.
obj-c的優(yōu)缺點
objc優(yōu)點: 1) Cateogies 2) Posing 3) 動態(tài)識別 4) 5)彈性消息傳遞 6) 不是一個過度復雜的 C 衍生語言 7) Objective-C 與 C++ 可混合編程 缺點: 1) 不支持命名空間 2) 不支持運算符重載
3) 不支持多重繼承
4) 使用動態(tài)運行時類型,所有的方法都是函數(shù)調(diào)用,所以很多編譯時優(yōu)化方法都用不到。(如內(nèi)聯(lián)函數(shù)等),性能低劣。
readwrite,readonly,assign,retain,copy,nonatomic屬性的作用
@property是一個屬性訪問聲明,擴號內(nèi)支持以下幾個屬性: 1,getter=getterName,setter=setterName,設置setter與getter的方法名 2,readwrite,readonly,設置可供訪問級別 2,assign,setter方法直接賦值,不進行任何retain操作,為了解決原類型與環(huán)循引用問題 3,retain,setter方法對參數(shù)進行release舊值再retain新值,所有實現(xiàn)都是這個順序(CC上有相關資料) 4,copy,setter方法進行Copy操作,與retain處理流程一樣,先舊值release,再Copy出新的對象,retainCount為1。這是為了減少對上下文的依賴而引入的機制。 5,nonatomic,非原子性訪問,不加同步,多線程并發(fā)訪問會提高性能。注意,如果不加此屬性,則默認是兩個訪問方法都為原子型事務訪問。鎖被加到所屬對象實例級。
1。assign和retain,copy的區(qū)別
assign就是和普通語言的賦值一樣
retain 在一個對象中保存該對象需要擁有的對象
對該對象進行應用計數(shù)+1
@property (retain) 為了寫程序方便
copy主要是賦值
一般 代理的申明都是assign 為什么
原因有2個,
1 根本就沒有必要把代理的計數(shù)器+1
主要是為了避免引用技術嵌套,遞歸
2。如何持久保存數(shù)據(jù)
NSUserDefaults, Plist, SQLite3, file
3。網(wǎng)絡方面得 比如如何檢測聯(lián)網(wǎng) http xml等
ASIHTTPRequest Reacheable.[hm]
原理是ifconfig 是不是有ip地址
Reachability
來判斷是否有網(wǎng)絡3G Wifi
4。類之間得繼承關系 比如UIview得父類是哪一個等等?
UIResponder,處理觸摸,
touchBegin, touchEnd, nextResponder
5。異常處理
都是自己判斷 錯誤信息
longjmp
char *p = malloc(100);
if (p == NULL) {
}
區(qū)分frame與bounds
//都是表示位置
//區(qū)別 frame:它的參考坐標系是(世界坐標系)(父視圖),設置坐標時以父類的左上角為坐標原點(參考點)
//bounds:參考坐標系(本地坐標系)(自身),設置坐標時以自己的左上角為坐標原點(參考點)
//當先給視圖設置了frame,再設置bouns時,視圖會以frame的中心點為中心,去設置bounds時的視圖的位置
//注意:bounds的坐標是不起作用的.
//當直接給視圖用bounds設置位置時,視圖會以父視圖的左上角為中心點設置自己的大小

//注意:在使用時,如果需要坐標點就使用frame 如果只是用大小就使用bounds
1—Autorelease pool
  自動釋放池(Autorelease pool)是OC的一種內(nèi)存自動回收機制,可以將一些臨時變量通過自動釋放池來回收統(tǒng)一釋放
  自動釋放池本事銷毀的時候,池子里面所有的對象都會做一次release操作
(1)在自動釋放池@autoreleasepool{}中alloc一個對象后(如p1),仍然需要用[p1 autorelease];只是這個語句和[p1 release];不同,后者表示把p1的retainCount-1,而前者僅僅表示把p1放到自動釋放池中返回一個self,自動釋放池結束銷毀時, 統(tǒng)一對里面的對象引用計數(shù)retainCount-1。
(2)@autoreleasepool{}可以隨意創(chuàng)建,也可以嵌套使用。
(3)不管這個對象是在自動釋放池內(nèi)還是外創(chuàng)建的,只要在自動釋放池內(nèi)寫一個[p1 autorelease];p1就會被放到自動釋放池中。注意autorelease是一個方法,且只有在自動釋放池中使用才有效。
(4)如果把一個對象重復加到自動釋放池如[p1 autorelease];[p1 autorelease];,那么會出錯。原因是:加載幾次,屆時自動釋放池就會用[p1 release];釋放幾次,但是由于這兩個加載的對象其實是一個對象同樣地址,所以第一次自動釋放正確,第二次自動釋放時發(fā)現(xiàn)已經(jīng)被釋放了,所以p1就 變成了野指針
2??4??
2—簡述內(nèi)存分區(qū)情況
(1)代碼區(qū):存放函數(shù)二進制代碼
(2)數(shù)據(jù)區(qū):系統(tǒng)運行時申請內(nèi)存并初始化,系統(tǒng)退出時由系統(tǒng)釋放。存放全局變量、靜態(tài)變量、常量
(3)堆區(qū):通過malloc等函數(shù)或new等操作符動態(tài)申請得到,需程序員手動申請和釋放
(4)棧區(qū):函數(shù)模塊內(nèi)申請,函數(shù)結束時由系統(tǒng)自動釋放。存放局部變量、函數(shù)參數(shù)
另一種說法:代碼區(qū),靜態(tài)區(qū),常量區(qū),堆區(qū)。棧區(qū)
3---視圖的生命周期
當一個視圖控制器被創(chuàng)建,并在屏幕上顯示的時候。 代碼的執(zhí)行順序
1、 alloc 創(chuàng)建對象,分配空間
2、init (initWithNibName) 初始化對象,初始化數(shù)據(jù)
3、loadView 從nib載入視圖 ,通常這一步不需要去干涉。除非你沒有使用xib文件創(chuàng)建視圖
4、viewDidLoad 載入完成,可以進行自定義數(shù)據(jù)以及動態(tài)創(chuàng)建其他控件
5、viewWillAppear 視圖將出現(xiàn)在屏幕之前,馬上這個視圖就會被展現(xiàn)在屏幕上了
6、viewDidAppear 視圖已在屏幕上渲染完成
當一個視圖被移除屏幕并且銷毀的時候的執(zhí)行順序,這個順序差不多和上面的相反
1、viewWillDisappear 視圖將被從屏幕上移除之前執(zhí)行
2、viewDidDisappear 視圖已經(jīng)被從屏幕上移除,用戶看不到這個視圖了
3、dealloc 視圖被銷毀,此處需要對你在init和viewDidLoad中創(chuàng)建的對象進行釋放
在同一個類A中,有方法a和方法b,方法b如何調(diào)用方法a?
[self a];
有A、B兩個類,B類繼承于A類,都實現(xiàn)了方法xx。創(chuàng)建B類實例b,如何讓b調(diào)用A類?
[super a];
const和Volatile分別代表什么意思?
Volatile表示每次都從內(nèi)存取數(shù)據(jù)
類型id代表什么意思?
面向對象包含哪些元素?
繼承和分類的區(qū)別?
Catogory
Catogory實現(xiàn)起來麻煩一些,但是使用方便
NSSet類的作用是什么?
集合
編寫一個完整程序,在控制臺打印字符串“HelloWorld!”
用遞歸實現(xiàn)計算n的階乘。(用objective-c語法實現(xiàn))
//
static全局變量與普通的全局變量有什么區(qū)別?static局部變量和普通局部變量有什么區(qū)別?static函數(shù)與普通函數(shù)有什么區(qū)別?
C語言中講講static變量和static函數(shù)有什么作用
static關鍵字有兩種意思,你看上下文來判斷
1,表示變量是靜態(tài)存儲變量
表示變量存放在靜態(tài)存儲區(qū).
2,表示該變量是內(nèi)部連接
(這種情況是指該變量不在任何{}之內(nèi),就象全局變量那樣,這時候加上static)
,也就是說在其它的.cpp文件中,該變量是不可見的(你不能用).
當static加在函數(shù)前面的時候
表示該函數(shù)是內(nèi)部連接,之在本文件中有效,別的文件中不能應用該函數(shù).
不加static的函數(shù)默認為是全局的.
也就是說在其他的.cpp中只要申明一下這個函數(shù),就可以使用它.
1、static全局變量與普通的全局變量有什么區(qū)別?static局部變量和普通局部變量有什么區(qū)別?static函數(shù)與普通函數(shù)有什么區(qū)別?
答:全局變量(外部變量)的說明之前再冠以static 就構成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲方式, 靜態(tài)全局變量當然也是靜態(tài)存儲方式。 這兩者在存儲方式上并無不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態(tài)的全局變量在各個源文件中都是有效的。 而靜態(tài)全局變量則限制了其作用域, 即只在定義該變量的源文件內(nèi)有效, 在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用, 因此可以避免在其它源文件中引起錯誤。
從以上分析可以看出, 把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域, 限制了它的使用范圍。
static函數(shù)與普通函數(shù)作用域不同。static函數(shù)僅在本文件中使用。只在當前源文件中使用的函數(shù)應該說明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應該在當前源文件中說明和定義。對于可在當前源文件以外使用的函數(shù),應該在一個頭文件中說明,要使用這些函數(shù)的源文件要包含這個頭文件
static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一次,防止在其他文件單元中被引用;
static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下一次依據(jù)上一次結果值;
static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個被調(diào)用中維持一份拷貝
2、如何引用一個已經(jīng)定義過的全局變量?
答:extern
可以用引用頭文件的方式,也可以用extern關鍵字,如果用引用頭文件方式來引用某個在頭文件中聲明的全局變理,假定你將那個變寫錯了,那么在編譯期間 會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那么在編譯期間不會報錯,而在連接期間報錯。
3、全局變量可不可以定義在可被多個.C文件包含的頭文件中?為什么?
答:可以,在不同的C文件中以static形式來聲明同名全局變量。
可以在不同的C文件中聲明同名的全局變量,前提是其中只能有一個C文件中對此變量賦初值,此時連接不會出錯。
什么是UDP和TCP的區(qū)別是什么?
TCP的全稱為傳輸控制協(xié)議。這種協(xié)議可以提供面向連接的、可靠的、點到點的通信。
UDP的全稱為用戶數(shù)據(jù)報協(xié)議,它可以提供非連接的不可靠的點到多點的通信。
用TCP還是UDP,那要看你的程序注重哪一個方面?可靠還是快速?
TCP/IP 建立連接的過程
在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務,采用三次握手建立一個連接。
第一次握手:建立連接時,客戶端發(fā)送連接請求到服務器,并進入SYN_SEND狀態(tài),等待服務器確認;
第二次握手:服務器收到客戶端連接請求,向客戶端發(fā)送允許連接應答,此時服務器進入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務器的允許連接應答,向服務器發(fā)送確認,客戶端和服務器進入通信狀態(tài),完成三次握手。
(所謂的三次握手就是要有三次連接信息的發(fā)送/接收過程。TCP連接的建立需要進行三次連接信息的發(fā)送/接收。)
-(void) print:(NSString*) msg
{
NSLog(@"%@",msg);
}
printf("%d,%c\n",i,c)
char str[10]=",str2[]={"China"};
strcpy(str1,str2);
printf("%d",max(a,b));
把 max(a,b)作為printf函數(shù)的一個參數(shù)。
obj-c有多重繼承么?不是的話有什么替代方法?
cocoa 中所有的類都是NSObject 的子類,多繼承在這里是用protocol 委托代理來實現(xiàn)的。你不用去考慮繁瑣的多繼承,虛基類的概念。多態(tài)特性在 obj-c 中通過委托來實現(xiàn)。
線程與進程的區(qū)別和聯(lián)系?
進程和線程都是由操作系統(tǒng)所體會的程序運行的基本單元,系統(tǒng)利用該基本單元實現(xiàn)系統(tǒng)對應用的并發(fā)性。
程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式。進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產(chǎn)生影響,而線程只是一個進程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對于一些要求同時進行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進程。
自動釋放池是什么,如何工作?
當您向一個對象發(fā)送一個autorelease消息時,Cocoa就會將該對象的一個引用放入到最新的自動釋放池。它仍然是個正當?shù)膶ο螅虼俗詣俞尫懦囟x的作用域內(nèi)的其它對象可以向它發(fā)送消息。當程序執(zhí)行到作用域結束的位置時,自動釋放池就會被釋放,池中的所有對象也就被釋放。
ojc-c 是通過一種"referring counting"(引用計數(shù))的方式來管理內(nèi)存的, 對象在開始分配內(nèi)存(alloc)的時候引用計數(shù)為一,以后每當碰到有copy,retain的時候引用計數(shù)都會加一, 每當碰到release和autorelease的時候引用計數(shù)就會減一,如果此對象的計數(shù)變?yōu)榱?, 就會被系統(tǒng)銷毀.
NSAutoreleasePool 就是用來做引用計數(shù)的管理工作的,這個東西一般不用你管的.
autorelease和release沒什么區(qū)別,只是引用計數(shù)減一的時機不同而已,autorelease會在對象的使用真正結束的時候才做引用計數(shù)減一。
什么是KVC和KVO?答:KVC(Key-Value-Coding)內(nèi)部的實現(xiàn):一個對象在調(diào)用setValue的時候,(1)首先根據(jù)方法名找到運行方法的時候所需要的環(huán)境參數(shù)。(2)他會從自己isa指針結合環(huán)境參數(shù),找到具體的方法實現(xiàn)的接口。(3)再直接查找得來的具體的方法實現(xiàn)。KVO(Key-Value-Observing):當觀察者為一個對象的屬性進行了注冊,被觀察對象的isa指針被修改的時候,isa指針就會指向一個中間類,而不是真實的類。所以isa指針其實不需要指向實例對象真實的類。所以我們的程序最好不要依賴于isa指針。在調(diào)用類的方法的時候,最好要明確對象實例的類名。
kvc 就是一種通過字符串去間接操作對象屬性的機制。
iphone中,自定義協(xié)議?
Protocol , 看代理 viewController
協(xié)議在oc中主要用在代理中
綁定的概念?
代理的概念?對它怎么理解?
為了模塊之間的松耦合
網(wǎng)絡編程中協(xié)議的概念。
NetworkDataDelegate;
3個函數(shù)理解 didReceive,
蘋果上架流程?
數(shù)據(jù)持久化存儲的方式 應用的場景
C語言中講講static變量和static函數(shù)有什么作用
static關鍵字有兩種意思,你看上下文來判斷
1,表示變量是靜態(tài)存儲變量
表示變量存放在靜態(tài)存儲區(qū).
2,表示該變量是內(nèi)部連接
(這種情況是指該變量不在任何{}之內(nèi),就象全局變量那樣,這時候加上static)
,也就是說在其它的.cpp文件中,該變量是不可見的(你不能用).
當static加在函數(shù)前面的時候
表示該函數(shù)是內(nèi)部連接,之在本文件中有效,別的文件中不能應用該函數(shù).
不加static的函數(shù)默認為是全局的.
也就是說在其他的.cpp中只要申明一下這個函數(shù),就可以使用它.
13.列舉幾種進程的同步機制,并比較其優(yōu)缺點。答案: 原子操作 信號量機制 自旋鎖 管程,會合,分布式系統(tǒng)
1.進程之間通信的途徑答案:共享存儲系統(tǒng)消息傳遞系統(tǒng)管道:以文件系統(tǒng)為基礎
2.進程死鎖的原因答案:資源競爭及進程推進順序非法
3.死鎖的4個必要條件答案:互斥、請求保持、不可剝奪、環(huán)路
4.死鎖的處理答案:鴕鳥策略、預防策略、避免策略、檢測與解除死鎖
14.堆和棧的區(qū)別管理方式:對于棧來講,是由編譯器自動管理,無需我們手工控制;對于堆來說,釋放工作由程序員控制,容易產(chǎn)生memory leak。1.申請大小:棧: 在Windows下,棧是向低地址擴展的數(shù)據(jù)結構,是一塊連續(xù)的內(nèi)存的區(qū)域。這句話的意思是棧頂?shù)牡刂泛蜅5淖畲笕萘渴窍到y(tǒng)預先規(guī)定好的,在 WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數(shù)),如果申請的空間超過棧的剩余空間時,將提示 overflow。因此,能從棧獲得的空間較小。
堆:堆是向高地址擴展的數(shù)據(jù)結構,是不連續(xù)的內(nèi)存區(qū)域。這是由于系統(tǒng)是用鏈表來存儲的空閑內(nèi)存地址的,自然是不連續(xù)的,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限于計算機系統(tǒng)中有效的虛擬內(nèi)存。由此可見,堆獲得的空間比較靈活,也比較大。2.碎片問題:對于堆來講,頻繁的new/delete勢必會造成內(nèi)存空間的不連續(xù),從而造成大量的碎片,使程序效率降低。對于棧來講,則不會存在這個問題,因為棧是先進后出的隊列,他們是如此的一一對應,以至于永遠都不可能有一個內(nèi)存塊從棧中間彈出3.分配方式:堆都是動態(tài)分配的,沒有靜態(tài)分配的堆。棧有2種分配方式:靜態(tài)分配和動態(tài)分配。靜態(tài)分配是編譯器完成的,比如局部變量的分配。動態(tài)分配由 alloca函數(shù)進行分配,但是棧的動態(tài)分配和堆是不同的,他的動態(tài)分配是由編譯器進行釋放,無需我們手工實現(xiàn)。4.分配效率:棧是機器系統(tǒng)提供的數(shù)據(jù)結構,計算機會在底層對棧提供支持:分配專門的寄存器存放棧的地址,壓棧出棧都有專門的指令執(zhí)行,這就決定了棧的效率比較高。堆則是C/C++函數(shù)庫提供的,它的機制是很復雜的。 15.什么是鍵-值,鍵路徑是什么模型的性質(zhì)是通過一個簡單的鍵(通常是個字符串)來指定的。視圖和控制器通過鍵來查找相應的屬性值。
在一個給定的實體中,同一個屬性的所有值具有相同的數(shù)據(jù)類型。
鍵-值編碼技術用于進行這樣的查找—它是一種間接訪問對象屬性的機制。鍵路徑是一個由用點作分隔符的鍵組成的字符串,用于指定一個連接在一起的對象性質(zhì)序列。第一個鍵的性質(zhì)是由先前的性質(zhì)決定的,接下來每個鍵的值也是相對于其前面的性質(zhì)。鍵路徑使您可以以獨立于模型實現(xiàn)的方式指定相關對象的性質(zhì)。通過鍵路徑,您可以指定對象圖中的一個任意深度的路徑,使其指向相關對象的特定屬性。16.c和obj-c如何混用1)obj-c的編譯器處理后綴為m的文件時,可以識別obj-c和c的代碼,處理mm文件可以識別obj-c,c,c++代碼,
但cpp文件必須只能用c/c++代碼,而且cpp文件include的頭文件中,也不能出現(xiàn)obj- c的代碼,因為cpp只是cpp。2) 在mm文件中混用cpp直接使用即可,所以obj-c混cpp不是問題3)在cpp中混用obj- c其實就是使用obj-c編寫的模塊是我們想要的。如果模塊以類實現(xiàn),那么要按照cpp class的標準寫類的定義,頭文件中不能出現(xiàn)obj-c的東西,包括#import cocoa的。
實現(xiàn)文件中,即類的實現(xiàn)代碼中可以使用obj-c的東西,可以import,只是后綴是mm。如果模塊以函數(shù)實現(xiàn),那么頭文件要按 c的格式聲明函數(shù),實現(xiàn)文件中,c++函數(shù)內(nèi)部可以用obj-c,但后綴還是mm或m。總結:只要cpp文件和cpp include的文件中不包含obj-c的東西就可以用了,cpp混用obj-c的關鍵是使用接口,
而不能直接使用實現(xiàn)代碼,實際上cpp混用的是 obj-c編譯后的o文件,這個東西其實是無差別的,所以可以用。obj-c的編譯器支持cpp.
17.cocoa touch框架iPhone OS 應用程序的基礎 Cocoa Touch 框架重用了許多 Mac 系統(tǒng)的成熟模式,但是它更多地專注于觸摸的接口和優(yōu)化。
UIKit 為您提供了在 iPhone OS 上實現(xiàn)圖形,事件驅動程序的基本工具,其建立在和 Mac OS X 中一樣的 Foundation 框架上,
包括文件處理,網(wǎng)絡,字符串操作等。 Cocoa Touch 具有和 iPhone 用戶接口一致的特殊設計。有了 UIKit,您可以使用 iPhone OS 上的獨特的圖形接口控件,按鈕,
以及全屏視圖的功能,您還可以使用加速儀和多點觸摸手勢來控制您的應用。各色俱全的框架 除了 UIKit 外,Cocoa Touch 包含了創(chuàng)建世界一流 iPhone 應用程序需要的所有框架,從三維圖形,到專業(yè)音效,
甚至提供設備訪問 API 以控制攝像頭,或通過 GPS 獲知當前位置。
Cocoa Touch 既包含只需要幾行代碼就可以完成全部任務的強大的 Objective-C 框架,也在需要時提供基礎的 C 語言 API 來直接訪問系統(tǒng)。這些框架包括:Core Animation:通過 Core Animation,您就可以通過一個基于組合獨立圖層的簡單的編程模型來創(chuàng)建豐富的用戶體驗。Core Audio:Core Audio 是播放,處理和錄制音頻的專業(yè)技術,能夠輕松為您的應用程序添加強大的音頻功能。Core Data:提供了一個面向對象的數(shù)據(jù)管理解決方案,它易于使用和理解,甚至可處理任何應用或大或小的數(shù)據(jù)模型。功能列表:框架分類下面是 Cocoa Touch 中一小部分可用的框架:音頻和視頻:Core Audio ,OpenAL ,Media Library ,AV Foundation數(shù)據(jù)管理 :Core Data ,SQLite圖形和動畫 :Core Animation ,OpenGL ES ,Quartz 2D網(wǎng)絡:Bonjour ,WebKit ,BSD Sockets用戶應用:Address Book ,Core Location ,Map Kit ,Store Kit
18.自動釋放池是什么,如何工作 當您向一個對象發(fā)送一個autorelease消息時,Cocoa就會將該對象的一個引用放入到最新的自動釋放池。
它仍然是個正當?shù)膶ο螅虼俗詣俞尫懦囟x的作用域內(nèi)的其它對象可以向它發(fā)送消息。
當程序執(zhí)行到作用域結束的位置時,自動釋放池就會被釋放,池中的所有對象也就被釋放。1. ojc-c 是通過一種"referring counting"(引用計數(shù))的方式來管理內(nèi)存的, 對象在開始分配內(nèi)存(alloc)的時候引用計數(shù)為一,
以后每當碰到有copy,retain的時候引用計數(shù)都會加一, 每當碰到release和autorelease的時候引用計數(shù)就會減一,如果此
對象的計數(shù)變?yōu)榱?, 就會被系統(tǒng)銷毀.2. NSAutoreleasePool 就是用來做引用計數(shù)的管理工作的,這個東西一般不用你管的.3. autorelease和release沒什么區(qū)別,只是引用計數(shù)減一的時機不同而已,autorelease會在對象的使用真正結束的時候才做引用計數(shù)減一.
19.objc優(yōu)點: 1) Cateogies 2) Posing 3) 動態(tài)識別 4) 指標計算 5)彈性訊息傳遞 6) 不是一個過度復雜的 C 衍生語言 7) Objective-C 與 C++ 可混合編程 objc缺點: 1) 不支援命名空間 2) 不支持運算符重載 3) 不支持多重繼承 4) 使用動態(tài)運行時類型,所有的方法都是函數(shù)調(diào)用,所以很多編譯時優(yōu)化方法都用不到。(如內(nèi)聯(lián)函數(shù)等),性能低劣。
20.sprintf,strcpy,memcpy使用上有什么要注意的地方 strcpy是一個字符串拷貝的函數(shù),它的函數(shù)原型為strcpy(char dst, const char src);將src開始的一段字符串拷貝到dst開始的內(nèi)存中去,結束的標志符號為 '\0',由于拷貝的長度不是由我們自己控制的,
所以這個字符串拷貝很容易出錯。具備字符串拷貝功能的函數(shù)有memcpy,這是一個內(nèi)存拷貝函數(shù),它的函數(shù)原型
為memcpy(char dst, const char src, unsigned int len);將長度為len的一段內(nèi)存,從src拷貝到dst中去,這個函數(shù)的長度可控。但是會有內(nèi)存疊加的問題。sprintf是格式化函數(shù)。將一段數(shù)據(jù)通過特定的格式,格式化到一個字符串緩沖區(qū)中去。sprintf格式化的函數(shù)的長度不可控,
有可能格式化后的字符串會超出緩沖區(qū)的大小,造成溢出。21. 用變量a給出下面的定義a) 一個整型數(shù)(An integer) b)一個指向整型數(shù)的指針( A pointer to an integer) c)一個指向指針的的指針,它指向的指針是指向一個整型數(shù)( A pointer to a pointer to an intege)r d)一個有10個整型數(shù)的數(shù)組( An array of 10 integers) e) 一個有10個指針的數(shù)組,該指針是指向一個整型數(shù)的。(An array of 10 pointers to integers) f) 一個指向有10個整型數(shù)數(shù)組的指針( A pointer to an array of 10 integers) g) 一個指向函數(shù)的指針,該函數(shù)有一個整型參數(shù)并返回一個整型數(shù)(A pointer to a function that takes an integer as an argument and returns an integer) h) 一個有10個指針的數(shù)組,該指針指向一個函數(shù),該函數(shù)有一個整型參數(shù)并返回一個整型數(shù)( An array of ten pointers to functions that take an integer argument and return an integer ) 答案是: a) int a; // An integer b) int a; // A pointer to an integer c) int *a; // A pointer to a pointer to an integer d) int a[10]; // An array of 10 integers e) int a[10]; // An array of 10 pointers to integers f) int (a)[10]; // A pointer to an array of 10 integers g) int (a)(int); // A pointer to a function a that takes an integer argument and returns an integer h) int (a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
22.readwrite,readonly,assign,retain,copy,nonatomic 屬性的作用@property是一個屬性訪問聲明,擴號內(nèi)支持以下幾個屬性:1,getter=getterName,setter=setterName,設置setter與 getter的方法名2,readwrite,readonly,設置可供訪問級別2,assign,setter方法直接賦值,不進行任何retain操作,為了解決原類型與環(huán)循引用問題3,retain,setter方法對參數(shù)進行release舊值再retain新值,所有實現(xiàn)都是這個順序(CC上有相關資料)4,copy,setter方法進行Copy操作,與retain處理流程一樣,先舊值release,再 Copy出新的對象,retainCount為1。
這是為了減少對上下文的依賴而引入的機制。5,nonatomic,非原子性訪問,不加同步,多線程并發(fā)訪問會提高性能。注意,如果不加此屬性,則默認是兩個訪問方法
都為原子型事務訪問。鎖被加到所屬對象實例級(我是這么理解的...)。
23.http和scoket通信的區(qū)別。
http是客戶端用http協(xié)議進行請求,發(fā)送請求時候需要封裝http請求頭,并綁定請求的數(shù)據(jù),服務器一般有web服務器配合(當然也非絕 對)。 http請求方式為客戶端主動發(fā)起請求,服務器才能給響應,一次請求完畢后則斷開連接,以節(jié)省資源。服務器不能主動給客戶端響應(除非采取http長連接 技術)。iphone主要使用類是NSUrlConnection。
scoket是客戶端跟服務器直接使用socket“套接字”進行連接,并沒有規(guī)定連接后斷開,所以客戶端和服務器可以保持連接通道,雙方 都可以主動發(fā)送數(shù)據(jù)。一般在游戲開發(fā)或股票開發(fā)這種要求即時性很強并且保持發(fā)送數(shù)據(jù)量比較大的場合使用。主要使用類是CFSocketRef。
TCP全稱是Transmission Control Protocol,中文名為傳輸控制協(xié)議,它可以提供可靠的、面向連接的網(wǎng)絡數(shù)據(jù)傳遞服務。傳輸控制協(xié)議主要包含下列任務和功能: 確保IP數(shù)據(jù)報的成功傳遞。 對程序發(fā)送的大塊數(shù)據(jù)進行分段和重組。 確保正確排序及按順序傳遞分段的數(shù)據(jù)。 通過計算校驗和,進行傳輸數(shù)據(jù)的完整性檢查。
6、TCP和UDP的區(qū)別 TCP提供的是面向連接的、可靠的數(shù)據(jù)流傳輸,而UDP提供的是非面向連接的、不可靠的數(shù)據(jù)流傳輸。 簡單的說,TCP注重數(shù)據(jù)安全,而UDP數(shù)據(jù)傳輸快點,但安全性一般
24.mvc設計模式是什么? 你還熟悉什么設計模式?設計模式:并不是一種新技術,而是一種編碼經(jīng)驗,使用比如java中的接口,iphone中的協(xié)議,繼承關系等基本手段,
用比較成熟的邏輯去處理某一種類型的事情,總結為所謂設計模式。面向對象編程中,java已經(jīng)歸納了23中設計模式。mvc設計模式 ,模型,視圖,控制器,可以將整個應用程序在思想上分成三大塊,對應是的數(shù)據(jù)的存儲或處理,前臺的顯示,
業(yè)務邏輯的控制。 Iphone本身的設計思想就是遵循mvc設計模式。其不屬于23中設計模式范疇。代理模式:代理模式給某一個對象提供一個代理對象,并由代理對象控制對源對象的引用.比如一個工廠生產(chǎn)了產(chǎn)品,
并不想直接賣給用戶,而是搞了很多代理商,用戶可以直接找代理商買東西,代理商從工廠進貨.常見的如QQ的自動回復就屬于代理攔截,代理模式在iphone中得到廣泛應用.單例模式:說白了就是一個類不通過alloc方式創(chuàng)建對象,而是用一個靜態(tài)方法返回這個類的對象。系統(tǒng)只需要擁有一個的全局對象,
這樣有利于我們協(xié)調(diào)系統(tǒng)整體的行為,比如想獲得[UIApplication sharedApplication];任何地方調(diào)用都可以得到 UIApplication的對象,
這個對象是全局唯一的。觀察者模式: 當一個物體發(fā)生變化時,會通知所有觀察這個物體的觀察者讓其做出反應。實現(xiàn)起來無非就是把所有觀察者的對象給這個物體,
當這個物體的發(fā)生改變,就會調(diào)用遍歷所有觀察者的對象調(diào)用觀察者的方法從而達到通知觀察者的目的。工廠模式:
public class Factory{  public static Sample creator(int which){   if (which==1) return new SampleA();  else if (which==2) return new SampleB(); } }25.你了解svn,cvs等版本控制工具么?版本控制 svn,cvs 是兩種版控制的器,需要配套相關的svn,cvs服務器。scm是xcode里配置版本控制的地方。版本控制的原理就是a和b同時開發(fā)一個項目,a寫完當天的代碼之后把代碼提交給服務器,
b要做的時候先從服務器得到最新版本,就可以接著做。 如果a和b都要提交給服務器,并且同時修改了同一個方法,就會產(chǎn)生代碼沖突,
如果a先提交,那么b提交時,服務器可以提示沖突的代碼,b可以清晰的看到,并做出相應的修改或融合后再提交到服務器。
26.什么是push(了解一下)。
客戶端程序留下后門端口,客戶端總是監(jiān)聽針對這個后門的請求,于是 服務器可以主動像這個端口推送消息。
27.靜態(tài)鏈接庫(了解一下)
(此為.a文件,相當于java里的jar包,把一些類編譯到一個包中,在不同的工程中如果導入此文件就可以使用里面的類,
具體使用依然是#import “ xx.h”)。
28.fmmpeg框架(了解一下)
(音視頻編解碼框架,內(nèi)部使用UDP協(xié)議針對流媒體開發(fā),內(nèi)部開辟了六個端口來接受流媒體數(shù)據(jù),完成快速接受之目的).
29.fmdb框架(了解一下)
(數(shù)據(jù)庫框架,對sqllite的數(shù)據(jù)操作進行了封裝,使用著可把精力都放在sql語句上面)。
30.320框架(了解一下)
(ui框架,導入320工程作為框架包如同添加一個普通框架一樣)。
cover(open) flower框架 (2d 仿射技術),內(nèi)部核心類是CATransform3D.
31.什么是沙箱模型?哪些操作是屬于私有api范疇?
某個iphone工程進行文件操作有此工程對應的指定的位置,不能逾越。iphone沙箱模型的有四個文件夾,分別是什么,永久數(shù)據(jù)存儲一般放在什么位置,得到模擬器的路徑的簡單方式是什么.
documents,tmp,app,Library。
(NSHomeDirectory()),
手動保存的文件在documents文件里
Nsuserdefaults保存的文件在tmp文件夾里
Documents 目錄:您應該將所有de應用程序數(shù)據(jù)文件寫入到這個目錄下。這個目錄用于存儲用戶數(shù)據(jù)或其它應該定期備份的信息。
AppName.app 目錄:這是應用程序的程序包目錄,包含應用程序的本身。由于應用程序必須經(jīng)過簽名,
所以您在運行時不能對這個目錄中的內(nèi)容進行修改,否則可能會使應用程序無法啟動。
Library 目錄:這個目錄下有兩個子目錄:Caches 和 Preferences
Preferences 目錄包含應用程序的偏好設置文件。您不應該直接創(chuàng)建偏好設置文件,而是應該使用NSUserDefaults類來取得和設置應用程序的偏好.
Caches 目錄用于存放應用程序專用的支持文件,保存應用程序再次啟動過程中需要的信息。

tmp 目錄:這個目錄用于存放臨時文件,保存應用程序再次啟動過程中不需要的信息。
獲取這些目錄路徑的方法:
1,獲取家目錄路徑的函數(shù):
NSString homeDir = NSHomeDirectory();
2,獲取Documents目錄路徑的方法:
NSArray paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString docDir = [paths objectAtIndex:0];
3,獲取Caches目錄路徑的方法:
NSArray paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString cachesDir = [paths objectAtIndex:0];
4,獲取tmp目錄路徑的方法:
NSString tmpDir = NSTemporaryDirectory();
5,獲取應用程序程序包中資源文件路徑的方法:
例如獲取程序包中一個圖片資源(apple.png)路徑的方法:
NSString imagePath = [[NSBundle mainBundle] pathForResource:@”apple” ofType:@”png”];
UIImage appleImage = [[UIImage alloc] initWithContentsOfFile:imagePath];
代碼中的mainBundle類方法用于返回一個代表應用程序包的對象。

文件IO寫入
1,將數(shù)據(jù)寫到Documents目錄:

  • (BOOL)writeApplicationData:(NSData )data toFile:(NSString )fileName {

NSArray paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString docDir = [paths objectAtIndex:0];
if (!docDir) {
NSLog(@”Documents directory not found!”); return NO;
}
NSString filePath = [docDir stringByAppendingPathComponent:fileName];
return [data writeToFile:filePath atomically:YES];
}

2,從Documents目錄讀取數(shù)據(jù):

  • (NSData )applicationDataFromFile:(NSString )fileName {
    NSArray paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString docDir = [paths objectAtIndex:0];
    NSString filePath = [docDir stringByAppendingPathComponent:fileName];
    NSData data = [[[NSData alloc] initWithContentsOfFile:filePath] autorelease];
    return data;
    }
    NSSearchPathForDirectoriesInDomains這個主要就是返回一個絕對路徑用來存放我們需要儲存的文件。

  • (NSString )dataFilePath {

NSArray paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:@"shoppingCar.plist"];
}

NSFileManager fm=[NSFileManager defaultManager];
if(![fm fileExistsAtPath:[self dataFilePath]]){

//下面是對該文件進行制定路徑的保存
[fm createDirectoryAtPath:[self dataFilePath] withIntermediateDirectories:YES attributes:nil error:nil];

//取得一個目錄下得所有文件名
NSArray files = [fm subpathsAtPath: [self dataFilePath] ];

//讀取某個文件
NSData data = [fm contentsAtPath:[self dataFilePath]];

//或者
NSData data = [NSData dataWithContentOfPath:[self dataFilePath]];
}
iphone常見私有api的應用(比如直接發(fā)送短信,訪問沙箱之外的磁盤文件).32.你在開發(fā)項目中時,用到了哪些數(shù)據(jù)存儲方式,iphone中常見的方式有哪些,各有什么區(qū)別?
數(shù)據(jù)存儲五種形式的應用范圍和性能區(qū)別
(core data, sqllite,對象序列化,文件直接讀寫,NSUserDefault(保存數(shù)據(jù)到temp文件夾中))文件直接讀寫 >core data> 對象序列化> sqllite>NSUserDefault.
33.線程的常見方法有哪些,你是如何處理多線程的,多線程同步問題你了解么?線程創(chuàng)建的幾種方式,線程的加鎖,休眠,喚醒,解鎖,退出,
多線程要考慮同步問題,解決同步問題的方式就是對某一資源加鎖,當一個線程操作本資源時,其他線程不能操作 。 系統(tǒng)自帶線程池(NSOpertionQueue)的作用:
凡是需要啟動多個線程的地方都可以使用NSOpertionQueue,加入到NSOpertionQueue中的對象都需要繼承NSOpertion。 NSOpertionQueue會在系統(tǒng)內(nèi)部啟動一個獨立線程去執(zhí)行這個被加入對象的main方法。
常用的地方是用nsoprationqueue 下載圖片,文件。如果是自己創(chuàng)建一個線程池,無非就是啟動多個線程的時候,
把這些線程對象放到一個大數(shù)組中,如果需要啟動線程的時候,先從數(shù)組中找空閑線程來使用。
自己管理線程池最大的難題是不好處理當啟動多個線程后,用戶在多個界面的跳轉的時候,對線程方法的回調(diào)管理。
而NSOpertionQueue可以很好的處理他。
34.init和initwithobject區(qū)別(語法)?
init創(chuàng)建的對象不帶自動釋放
35.你連接服務器用的是什么方法,如果請求過程中,網(wǎng)絡出了問題這么辦?NSUrlConnection 連接后,有一系列委托方法來接受來自服務器的響應和數(shù)據(jù),
其中接受相應的方法回得到服務器要傳回的數(shù)據(jù)有多大,接受數(shù)據(jù)的方法會反復調(diào)用來不斷接受服務器數(shù)據(jù),
如果網(wǎng)絡出了問題了,會調(diào)用一個方法讓你來做相關處理。
36.你使用過json解析方式么,他們的底層是如何處理的你了解么?
json解析的用法,用框架的用法簡單介紹:
底層原理遍歷字符串中的字符,最終根據(jù)格式規(guī)定的特殊字符,比如{}號,[]號, : 號 等進行區(qū)分, {}號是一個字典的開始,[]號是一個數(shù)組的開始, : 號是字典的鍵和值的分水嶺,最終乃是將json數(shù)據(jù)轉化為字典,
字典中值可能是字典,數(shù)組,或字符串而已。
37.xml解析的原理是什么,你還用過其他解析方式么?NSXMLParser, 其他解析方式有自定義二進制解析,就是按字節(jié)去解析,電話會談就是如此,
還可以是字符串之間用特殊符號連接的數(shù)據(jù),將此數(shù)據(jù)用特殊符號可以分割成所用數(shù)據(jù)。
38.協(xié)議是什么,有什么作用.?
協(xié)議很像java中的接口,某個類實現(xiàn)協(xié)議后,就必須實現(xiàn)協(xié)議中規(guī)定的@require的方法,比如一個類A, 一個類B都實現(xiàn)某“協(xié)議”后,
這個類A的對象和B的對象都可以賦值給這個協(xié)議的類型變量,比如 id<協(xié)議> 變量名 = A類或B類的對象,
于是這個變量就完成了能夠指向多個不同的類的對象并調(diào)用對象中的實現(xiàn)協(xié)議的方法。39.類別有什么作用?類別的使用 。 類別有三大作用,
可以使本來需要在.h中聲明的方法放到.m文件中聲明,達到了可以使方法不對外公開。
可以方便的擴展類,甚至系統(tǒng)類都可以輕易擴展,維護了代碼原本的結構不受影響。
類別可以寫到不同的.h或.m文件中,可以分散代碼到跟類別的擴展功能想關聯(lián)的地方,方便查看。40.分線程回調(diào)主線程方法是什么,有什么作用?[self performSelectorOnMainThread:@selector(buttonGo2) withObject:nil waitUntilDone:YES];[self performSelector:@selector(buttonGo2) onThread:[NSThread mainThread] withObject:nil waitUntilDone:YES];需要即時刷新ui控件的時候,經(jīng)常使用。41.iphone閱讀器,如果要讀取一個文本文件,請問你是如何處理編碼問題的?另外像pdf格式的文件,你如何讀取。?
iphone手機閱讀器中對于PDF格式的閱讀,可以直接用UIWebView控件顯示,也可以從網(wǎng)上下到很多直接讀取pdf格式的代碼
直接從pdf中得到數(shù)據(jù)。復雜表格動畫- (void)insertRowsAtIndexPaths:(NSArray )indexPaths withRowAnimation:(UITableViewRowAnimation)animation; -(void)deleteRowsAtIndexPaths:(NSArray )indexPaths withRowAnimation:(UITableViewRowAnimation)animation;- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
42.你在開發(fā)大型項目的時候,如何進行內(nèi)存泄露檢測的? 可以通過xcode的自帶工具run---start with performance tool里有instruments下有個leaks工具,
啟動此工具后,運行項目,工具里可以顯示內(nèi)存泄露的情況,雙擊可找到源碼位置,可以幫助進行內(nèi)存泄露的處理。
43.你做iphone開發(fā)時候,有哪些傳值方式,view和view之間是如何傳值的?
壓棧。
44.讓一個物體從界面中的一點運動到另外一點,有哪些方法?四種方式:1. beginAnimation
2. 線程
3. NSTimer
4. 圖層動畫(路徑)
45.你了解哪些加密方式? Base64, MD5, 循環(huán)右移位等.
46.地圖定位
CLLocationManager位置管理器 使用Core Location框架來確定iphone的位置(GPS,蜂窩基站三角網(wǎng),wps三種方式)
MKMapView提供了一套可植入的地圖接口,可以讓我們在應用中展示地圖,并對其進行相關的操作。一般來說,我們可以指定一個展示區(qū)域,放一些標記在上面,還可以加蓋一些層在上面。
MKMapView依賴Google map里面相關服務(如Google Earth API等),所以地圖的左下角會有Google字樣。
47.打開url
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8004664411"]];mailto:// sms://
http網(wǎng)絡通信
ASIHTTPRequest 是一個直接在CFNetwork上做的開源項目:提供直接提交(HTTP POST)文件的API,異步請求與隊列,自動管理上傳與下載隊列管理機,ASIFormDataRequest用于適合上傳文件,圖片數(shù)據(jù)。
圖片瀏覽
UIImagePickerController可以從相冊,相機,膠卷里獲得圖片。
對像序列化
NSCoding encodeWithCoder initWithCoder
NSKeyedUnarchiver NSKeyedArchiver
各種picker
UIDatePicker UIPickerView
電影播放
MPMoviePlayerController
音樂播放
MPMusicPlayerController
53.線程 ?
a. 線程的創(chuàng)建和使用規(guī)則?
答:NSThread
三種方法
(id)init; // designated initializer
(id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;
(void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument
(void)start;
b. 主分線程
答:啟動分線程,上面已提到!加到主線程方法performSelector!
//加到主線程addData()是主線程的方法!只有加到主線程后,才能調(diào)用主線程的方法
[target performSelector:@selector(addData:) onThread:[NSThread mainThread] withObject:item waitUntilDone:YES];
//[target addData:item];//沒有加到主線程后,調(diào)用主線程的方法!一定會崩!

c.線程鎖
答:NSCondition
方法:
[thread lock];//加鎖
sleep(n);//線程休眠
[thread singnal];//相當于通知,線程啟動
[thread unlock];//解鎖
[thread exit];//線程退出
54.各種 排序算法?
希爾排序、快速排序、冒泡排序、
55.通信底層原理
答:OSI七層模型
7 應用層: ftp,smtp,http,telnet,tftp(通過各種協(xié)議,最終還是包裝成TCP數(shù)據(jù)包,發(fā)送到網(wǎng)絡中!)
6 表現(xiàn)層:
5 會話層:
4 傳輸層: tcp udp
3 網(wǎng)絡層: ip,ICMP,IGRP,EIGRP,OSPF,ARP
2 數(shù)據(jù)鏈路層: STP,VT
1 物理層:
為什么很多內(nèi)置類如UITableViewController的delegate屬性都是assign而不是retain的?
答:
會引起循環(huán)引用
所有的引用計數(shù)系統(tǒng),都存在循環(huán)應用的問題。例如下面的引用關系:

  • 對象a創(chuàng)建并引用到了對象b.
  • 對象b創(chuàng)建并引用到了對象c.
  • 對象c創(chuàng)建并引用到了對象b.
    這時候b和c的引用計數(shù)分別是2和1。
    當a不再使用b,調(diào)用release釋放對b的所有權,因為c還引用了b,所以b的引用計數(shù)為1,b不會被釋放。
    b不釋放,c的引用計數(shù)就是1,c也不會被釋放。從此,b和c永遠留在內(nèi)存中。
    這種情況,必須打斷循環(huán)引用,通過其他規(guī)則來維護引用關系。我們常見的delegate往往是assign方式的屬性而不是retain方式 的屬性,
    賦值不會增加引用計數(shù),就是為了防止delegation兩端產(chǎn)生不必要的循環(huán)引用。
    如果一個UITableViewController 對象a通過retain獲取了UITableView對象b的所有權,這個UITableView對象b的delegate又是a,
    如果這個delegate是retain方式的,那基本上就沒有機會釋放這兩個對象了。自己在設計使用delegate模式時,也要注意這點。
    以下每行代碼執(zhí)行后,person對象的retain count分別是多少?
    Person person = [[Person alloc] init]; count 1
    [person retain]; retain count 2
    [person release];retain count 1
    [person release];retain count = 0
    58.在一個對象的方法里面:
    self.name = “object”;

    name =”object”
    有什么不同嗎?
    答:self.name = "object"會調(diào)用對象的setName()方法,會使object引用計數(shù)加1,name = "object"會直接把object賦值給當前對象的name 屬性,引用計數(shù)不增加。
    59.readwrite,readonly,assign,retain,copy,nonatomic屬性的作用?
    @property是一個屬性訪問聲明,擴號內(nèi)支持以下幾個屬性:1,getter=getterName,setter=setterName,設置setter與getter的方法名2,readwrite,readonly,設置可供訪問級別
    3,assign,setter方法直接賦值,不進行任何retain操作,為了解決原類型與環(huán)循引用問題4,retain,setter方法對參數(shù)進行release舊值再retain新值,所有實現(xiàn)都是這個順序(CC上有相關資料)
    5,copy,setter方法進行Copy操作,與retain處理流程一樣,先舊值release,再Copy出新的對象,retainCount為1。這是為了減少對上下文的依賴而引入的機制。
    6,nonatomic,非原子性訪問,不加同步,多線程并發(fā)訪問會提高性能。注意,如果不加此屬性,則默認是兩個訪問方法都為原子型事務訪問。鎖被加到所屬對象實例級(我是這么理解的…)。
    7,@synthesize xxx; 來實現(xiàn)實際代碼
    60.1.main()
    {
    int a[5]={1,2,3,4,5};
    int ptr=(int )(&a+1);
    printf("%d,%d",(a+1),(ptr-1));
    }
    答:2,5
    (a+1)就是a[1],(ptr-1)就是a[4],執(zhí)行結果是2,5
      &a+1不是首地址+1,系統(tǒng)會認為加一個a數(shù)組的偏移,是偏移了一個數(shù)組的大小(本例是5個int)
      int ptr=(int )(&a+1);
      則ptr實際是&(a[5]),也就是a+5
    原因如下:
      &a是數(shù)組指針,其類型為 int ()[5];
      而指針加1要根據(jù)指針類型加上一定的值,不同類型的指針+1之后增加的大小不同。
      a是長度為5的int數(shù)組指針,所以要加 5sizeof(int)
      所以ptr實際是a[5]
      但是prt與(&a+1)類型是不一樣的(這點很重要)
      所以prt-1只會減去sizeof(int
    )
      a,&a的地址是一樣的,但意思不一樣
    a是數(shù)組首地址,也就是a[0]的地址,&a是對象(數(shù)組)首地址,
    a+1是數(shù)組下一元素的地址,即a[1],&a+1是下一個對象的地址,即a[5].

文/孫國慶(簡書作者)
原文鏈接:http://www.lxweimin.com/p/c6062811f32a
著作權歸作者所有,轉載請聯(lián)系作者獲得授權,并標注“簡書作者”。

C:
C語言中,內(nèi)存中的棧是什么?如果我要創(chuàng)建一個大數(shù)組,應該如何創(chuàng)建?
鏈表和數(shù)組的區(qū)別
如何根據(jù)函數(shù)參數(shù)動態(tài)創(chuàng)建一個數(shù)組,并將數(shù)組中的元素全部設為0?
野指針是什么,如何避免

OC:
屬性中copy這個關鍵字
KVO用過嗎,什么時候用,如何手動觸發(fā)KVO
類目和繼承有哪些區(qū)別,它們在重寫一個方法的時候有怎樣的區(qū)別
同時重寫一個屬性的getter和setter會有怎樣的問題?

OC高級
解釋一下GCD中的同步和異步有什么區(qū)別?
說一個你遇到過的內(nèi)存泄漏的例子,你是如何發(fā)現(xiàn)并解決的?
如何用GCD實現(xiàn):5個任務并行執(zhí)行,然后在5個都結束的時候執(zhí)行一個新的任務
說一下MVVM的工作原理,它解決了什么問題?
autorelease什么時候釋放的

runtime:
如何為類目添加屬性
isKindOfClass和isMemberOfClass有什么區(qū)別?
解釋一下isa指針和IMP指針
什么是method swizzling,用它來解決什么問題

runloop:
以+ scheduledTimerWithTimeInterval...的方式觸發(fā)的timer,在滑動頁面上的列表時,timer會暫定回調(diào),為什么?如何解決?

UI:
addChildViewController用過嗎,一般什么時候會用?需要注意哪些問題?
viewDidLoad什么時候調(diào)用?
UIScrollView的contentOffset可不可以停在超出contentSize大小限制的地方?
bounds和frame的區(qū)別
響應者鏈是什么東西?如何工作的?如何處理手勢沖突?

動畫和繪圖:
CALayer和持有它的那個UIView之間是怎樣的關系?
modelLayer和presentationLayer是如何工作的?
使用動畫移動一個UIButton,在動畫的過程中,這個Button可以被點擊嗎?如果要實現(xiàn)Button在動畫的過程中可以隨時被點擊,應該怎樣實現(xiàn)?
CADisplayLink有什么用?它和NSTimer在Runloop中的表現(xiàn)有無區(qū)別?有什么區(qū)別?
UITableView的優(yōu)化

數(shù)據(jù)持久化:
沙盒中的三個文件夾分別是什么,分別用來存放什么東西,分別說明一下里面的數(shù)據(jù)在:1、應用退出;2、iPhone重啟;3、應用更新 以后會出現(xiàn)怎樣的變化
如果你要保存類似QQ會話列表和聊天記錄的信息,你準備使用哪種數(shù)據(jù)持久化方式?簡要說明一下原因和如何實現(xiàn)

網(wǎng)絡:
簡要描述一下TCP和UDP的區(qū)別
TCP的三次握手是怎樣進行的
為什么我們的網(wǎng)絡請求基本上使用HTTP而不用TCP

其他:
簡要描述一下即時通信的原理
SD的圖片緩存機制是如何實現(xiàn)的
APNs推送流程和原理

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,860評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,025評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,421評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,642評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,177評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,970評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,157評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,410評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,896評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,157評論 2 375

推薦閱讀更多精彩內(nèi)容

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,197評論 30 471
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 1,998評論 0 7
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理。運行時機制的原理和運用場景。SDWebImage的原...
    LZM輪回閱讀 2,025評論 0 12
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,372評論 0 35
  • 本來是想去看《健忘村》的,但因為拍片太少,唯一的一場看完就到凌晨,最后看了一部不需要等太久的電影《功夫瑜伽》...
    弋子尤閱讀 3,539評論 1 0