1.堆棧的區(qū)別
對于棧來講,是由編譯器自動管理的,無需我們手動去控制;
對于堆來講,是程序員來控制的,容易產(chǎn)生memory leak。
2.C語言數(shù)組和鏈表的區(qū)別
數(shù)組內(nèi)的元素分配的內(nèi)存地址是連續(xù)的,鏈表中各節(jié)點間的內(nèi)存地址一般來說是不連續(xù)的。
數(shù)組中只能存放一種數(shù)據(jù)類型,鏈表可以存儲的數(shù)據(jù)比數(shù)據(jù)更多,更豐富。
3.delegate 和notification 的區(qū)別,和使用的情況
delegate:消息的發(fā)送者(sender)和接受者(receiver)一個事件將要發(fā)生,delegate同意然后發(fā)送響應(yīng)者事件,delegate機制使得接受者可以改變發(fā)送者的行為。通常發(fā)送者和接受者的關(guān)系是一對多的管理
Notification:消息的發(fā)送者告知接受者事件已經(jīng)發(fā)生或者將要發(fā)生,僅此而已,接受者不能反過來影響發(fā)送者的行為。通常發(fā)送者和接受者的關(guān)系是間接的多對關(guān)系。
4 什么是mvc 為什么要要使用MVC,有什么好處
mvc 是一種設(shè)計模式
model 數(shù)據(jù)模型:用于封裝與程序的業(yè)務(wù)邏輯有關(guān)的數(shù)據(jù)以及對數(shù)據(jù)的處理方法,有對數(shù)據(jù)直接的訪問權(quán)限。
view 實體能夠?qū)崿F(xiàn)數(shù)據(jù)的目的顯示。
controller 控制器起到不同層面的主治作用,用于控制應(yīng)用程序的流程。
一個UITableView能否綁定多個數(shù)據(jù)源
不呢
一個UIViewcontroller能否管理多個UItableview
能夠
ios4.5.6 相對于以前的版本添加了那些新特性
這個就很多了, 比如拋棄了gool地圖新推maps應(yīng)用,大幅加強中國本地化的支持,siri 開口講普通話,通過icloud體驗分享樂趣,Passbook電子票圈的管理,隨時隨地FacetTime,電話功能鄭強,Safari支持全屏瀏覽,Mail應(yīng)用新增Vip
萬能輔助器,更強大了。
同不請求和異步請求的區(qū)別
發(fā)送同步請求的時候,程序?qū)⑼V褂脩艚换?,知道服?wù)器返回數(shù)據(jù),才能進行下一步操作,異步操作不會阻塞線程,而是會建立一個新的線程來操作,用戶發(fā)出請求后依然可以實現(xiàn)和用戶的操作。
iOS 中的多線程操作,多線程方式
iOS 中提供了方便的多線程調(diào)用機制:NSOperation 和NSOperationQueue 使用方法很簡單一般都是講NSOperation對象加入到NSOperationQueu 隊列中,然后在執(zhí)行,直到任務(wù)操作完成
10 UIViewController的生命周期
當一個視圖控制器被創(chuàng)建,并在屏幕上顯示的時候,代碼執(zhí)行的順序是
alloc 創(chuàng)建對象,分配內(nèi)存空間。
init 初始化對象,初始化數(shù)據(jù)
loadView 加載view
viewDidLoad 控件 加載完畢后可以對數(shù)據(jù)及動態(tài)創(chuàng)建其他
5.viewWillApper 視圖加載在屏幕之前,馬上這個視圖就要顯示
6.viewDidAppear 視圖已經(jīng)在屏幕上渲染完成
// 視圖控制器重屏幕上移除的
vieWillDisappear 視圖將被從屏幕移除之前執(zhí)行
vieDidDISappear 視圖已經(jīng)從屏幕上移除
dealloc 對象進行釋放,視圖被銷毀
viewDidUnload 顯示的controller執(zhí)行,出現(xiàn)內(nèi)存警告在內(nèi)存不足的時候調(diào)用,并對所有非當前的視圖的字視圖銷毀,來釋放內(nèi)存空間,此時開發(fā)者需要手動的對viewLoad,ViewDidLoad 中創(chuàng)建的對象釋放內(nèi)存。因為當這個視圖再次顯示在屏幕的時候回調(diào)用loadView , ViewDidLoad再次調(diào)用,一遍再次構(gòu)造視圖。
11 Autorerelease對象什么時候釋放
autorelease 實際上是把對release的調(diào)用延遲了,對于一個Autorelease 系統(tǒng)只是把該Object 放入了當前的AutoreleasePool中,當該pool被釋放的時候該pool中的所有對象會調(diào)用Release
12.iOS 數(shù)據(jù)持久化
屬性列表
對象歸檔
SQLite3
CoreDa'ta
14 . Object -c 的類可以多重繼承嗎?可以實現(xiàn)多個接口么?Category是什么?重寫一個類的方式用繼承還是分類好?為什么?
Object中的類不能使用多重繼承,可以實現(xiàn)對個接口,通過實現(xiàn)多個接口可以完成c++的多種繼承, Category是類別 一般情況用分類好,用Category 去重寫的方法,僅對本Category 有效,不會影響到其他類與原有類的關(guān)系。
15 #import #include 的區(qū)別, @class #import <> 跟#import“” 的 區(qū)別
import 是Object_C 導(dǎo)入頭文件的關(guān)鍵字,#include 是C /C++ 導(dǎo)入頭文件的關(guān)鍵字,使用#import頭文件會自動只導(dǎo)入一次,不會重復(fù)的導(dǎo)入,相當于#include 和#p'ragme once
@class 告訴編譯器一個類的申明,當執(zhí)行時,才去查看類的實現(xiàn)文件,可以解決頭文間的相互包含,
import《》用力來包含系統(tǒng)的頭文件,#import 用來包含用戶的頭文件
16 屬性 readwrite , readonly ,assign, retain , copy ,nonatomic 是什么作用在什么情況下使用。
readwrite 是可讀可寫特性,需要生成getter 方法和setter方法是
2.readonly 是只讀屬性,只會生成getter方法,不會生成setter方法。
不希望屬性的內(nèi)外發(fā)生改變,assign是賦值特性,setter方法將傳入的參數(shù)賦值給實例變量,
retain 僅設(shè)置變量的時候,表示持有特性,setter 方法將傳入?yún)?shù)先保留,在賦值,傳入的參數(shù)retaincount 會加1
copy 表示賦值特性,setter方法將傳入的對象復(fù)制一份,需要完全的一份新的變量的時候,
6 . nonatomic 非原子操作,決定編譯器生成的setter getter 方法是否是原子操作,atomic表示多線程安全,一般用nonatomic
17 在Object-C中數(shù)據(jù)類型有哪些,和c 的基本類型有什么區(qū)別。
Object-c的數(shù)據(jù)類型有NSString ,NSNumber,NSArray,NMutableArray,NSData這些都是class創(chuàng)建以后都是對象,而c語言的是基本數(shù)據(jù)類型,只是一定字節(jié)的內(nèi)存空間,用于存放數(shù)組,而在object-c 的NSNumber 包含父類NSObject 的 方法和自己的方法可以完成復(fù)雜的操作。
18 Object-C如何對內(nèi)存管理的,說說的你看法和解決方法
Object -C 的內(nèi)存管理主要有三中方式ARC (自動內(nèi)存計數(shù)),手動管理內(nèi)存計數(shù),內(nèi)存池。解決的方法的話是誰持有誰釋放。
19 如何都ios設(shè)備進行性能測試
Profile -> Instruments ->Time Profiler
20 Object c中創(chuàng)建線程的方法是什么?如何在主線程中執(zhí)行代碼,方法是什么》如何延遲執(zhí)行代碼的方法又是什么?
創(chuàng)建線程的方法有三種,NSThread 創(chuàng)建,使用GCD的dispatch ,適應(yīng)NSOPeration然后加入NSOperationQueue中
在主線程執(zhí)行代碼的方法是 performSelectorOnMainThread;
如果想延遲執(zhí)行代碼的方法有PerformSelector:onThread:withObject:waitUntilDone;
21描述一下 iOS SDK中如何實現(xiàn)MVC的開發(fā)模式的。
mvc 是模型-》視圖-》控制 開發(fā)模式。對于ios的SDK 所有的View都是視圖控制圖層的,他應(yīng)獨立于模型層,由視圖控制層來控制。所有的用戶數(shù)據(jù)都是模型層,它應(yīng)該獨立于視圖,說的的ViewController 都是控制層,由它負責(zé)控制視圖,訪問模型數(shù)據(jù)。
定義屬性的時候,什么情況下使用 copy ,assign,retain?
adding 用于簡單的數(shù)據(jù)類型,如NSInteger,double,bool等。
retain和copy 用于對象,copy 相當于a指向一個對象,b也指向同樣的對象時候,如果使用assign a如果釋放,在調(diào)用b就會crash'
3.若果使用copy 的方式,a和b各自有自己的內(nèi)存,就可以解決這個問題。retain 會是計數(shù)器加 1 ,也可以解決assign的問題。
4.atomic 和nonatomic 用來解決編譯器生成的getter 和setter是否是原子操作,多線程的環(huán)境下,原子操作是必要的,否則可引起錯的結(jié)果,加了atomic的setter函數(shù)變成這樣
if(property != newValue){
[Property release]
property = [newValule retain];
}
23 Object -c 有私有方法嗎? 私有變量嗎?
Object 類里面的方法只有兩種,靜態(tài)的方法和實力方法,所有實例變量都是私有的,所有的實例方法默認都是共有的、
24 .淺拷貝和深拷貝的區(qū)別是
淺拷貝:只是復(fù)制對象的指針,而不是復(fù)制應(yīng)用對象的本身,深拷貝就是復(fù)制應(yīng)用對象的本身、、、
25.自動釋放池是什么,是如何工作的?
當你想一個對象發(fā)送autorelease 消息的時候,Cocoa 就會將該對象的一個引用放到罪行的自動釋放池,他任然是個正當?shù)膶ο螅虼俗詣俞尫懦囟x的作用域內(nèi)的其他對象可以向他發(fā)送消息。當長須執(zhí)行到作用域結(jié)束的位置,自動釋放池就會被釋放,池子中的所有對象就會被釋放。
26.單件實例是什么?
Foundation 和Application kit 框架中的一些類只允許創(chuàng)建單件對象,這個對象就是在當前進程中的唯一實例。NSFileManger 和NSWorkspace類在使用的時候是基于進程進行的單件對象的實例化。當向這些類請求實例化的時候,他們會想你傳遞單一的一個引用,如果該實例還不存在,者首先要實例的分配和初始化、
27 。類別的作用?繼承和類別在實現(xiàn)中有什么區(qū)別
category 可以在不獲悉,不改變原來代碼的情況下往里面添加新的方法,只能添加不能刪除修改。并且如果類別和原來類中的方法產(chǎn)生名沖突,則類別間覆蓋原來的方法,應(yīng)為列別具有更高的優(yōu)先級。類別中主要有3個作用。
將類的實現(xiàn)分散到多個不同文件或多個不同的框架中。
2.創(chuàng)建對私有方法的前向引用。
向?qū)ο筇砑臃钦降膮f(xié)議。繼承可以增加,修改或者刪除方法,并且可以增加屬性。
類別和擴展的區(qū)別
category 和extensions 的不同在于后者可以添加屬性,寧外后者添加的方法是必須要實現(xiàn)的,extensions 可以認為是一個私有的Category。
KVO和KVC
KVC 鍵 值編碼 是一種簡介訪問對象的屬性,使用字符串來表示屬性,而不是日通過調(diào)用存取的方法,直接或通過實例變量訪問機制。很多情況下可以簡化代碼。apple。
KVO鍵值觀察者機制,他提供和了觀察一個數(shù)次那個變化的方法,極大的簡化了代
[self addObserver:selforKeyPath:@"highlighted" options:0 context:nil]; #pragma mark KVO
-(void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)objectchange:(NSDictionary )change context:(void *)context
{
if ([keyPath isEqualToString:@"highlighted"])
{ [self setNeedsDisplay];
}
} 對于系統(tǒng)是根據(jù)keypath去取的到相應(yīng)的值發(fā)生改變,理論上來說是和kvc機制的道理是一 樣的。 對于kvc機制如何通過key尋找到value: “當通過KVC調(diào)用對象時,比如:[self valueForKey:@”someKey”]時,程序會自動試圖通過 幾種不同的方式解析這個調(diào)用。首先查找對象是否帶有someKey 這個方法,如果沒找到, 會繼續(xù)查找對象是否帶有someKey這個實例變量(iVar),如果還沒有找到,程序會繼續(xù)試 圖調(diào)用 -(id)valueForUndefinedKey:這個方法。如果這個方法還是沒有被實現(xiàn)的話,程序會拋出 一個NSUndefinedKeyException異常錯誤。(cocoachina.com注:Key-Value Coding查找方法的時候,不僅僅會查找someKey這個方法, 還會查找getsomeKey這個方法,前面加一個get,或者_someKey以及_getsomeKey這幾種形式。同時,查找實例變量的時候也會不僅僅查找someKey這個變量,也會查找_someKey這個變量是否存在。) 設(shè)計valueForUndefinedKey:方法的主要目的是當你使用-(id)valueForKey方法從對象中 請求值時,對象能夠在錯誤發(fā)生前,有最后的機會響應(yīng)這個請求。這樣做有很多好處,下面的兩個例子說明了這樣做的好處?!?來至cocoa,這個說法應(yīng)該挺有道理。 因為我們知道button卻是存在一個highlighted實例變量.因此為何上面我們只是add一個 相關(guān)的keypath就行了,可以按照kvc查找的邏輯理解,就說的過去了。
代理的作用
代理的目的是改變或傳遞控制鏈,允許一個類在有個特定時刻通知其他類,而不需要獲得哪些類的指針??梢詼p少框架的復(fù)雜程度。代理可以理解為jave只能的回調(diào)監(jiān)聽機制的一種。
31 響應(yīng)者鏈
時間的響應(yīng)鏈,包括點擊時間,畫面刷新等。在試圖棧內(nèi)從上倒下,或者從下島上傳播。
32frame 和bounds的區(qū)別
1.frame 是指 該view在父view坐標系統(tǒng)中的位置和大?。▍⒄拯c事父類的坐標系統(tǒng))
bounds 該view 在本省坐標系統(tǒng)中的位置和大小(參照點是自己的坐標系統(tǒng))
方法和選擇器有什么不同
selector 是一個方法的名字,method 是一個組合體
34 ARC自動引用技術(shù)
ARC 是編譯特性,不是運行時特性,只是在編譯的時候,編譯器會自動加上釋放代碼。
不能使用release、retain autorelease retainCont
dealloc 注意
不能再dealloc中調(diào)用【super dealloc】;
不能在dealloc 中釋放資源。
@property 參數(shù)說明
1.retain 改為strong
基本類型數(shù)據(jù)還是用assign
copy 還是用copy
如果兩個對象循環(huán)引用,一個用strong 一個用weak
weak 是用在對象上,weak其實作用和assign相當
ARC 中只允許使用通過@autoreleasepool{}創(chuàng)建自動釋放池
36.GCD
Grand Central Dispatch 簡稱GCD 解決多核并運算的一種方法
Grand Central Dispatch
dispatch _queue_t newDispath = dispatch_get _global _queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_async(newDispath, ^{[self downloadImage]})
deifine DISPATCH_QUEUE_PRIORITY_HIGH 2
define DISPATXH_QUEUE_PRIORITY_DEFALT 0
distatch queue 分為三種
Serial(串行) 有稱為private dispatch queues ,當你在同時執(zhí)行一個任務(wù)。
Serial queue 通常用于同步訪問特定的資源或數(shù)據(jù),當你創(chuàng)建多個serial
queue時,雖然他們各自是同步執(zhí)行,但Serial queue 與Serialqueue 之間并發(fā)執(zhí)行的。(這個有問題)
Concurrent(并發(fā))又稱為global dispatch queue , 可以并發(fā)的執(zhí)行多個任務(wù),但是執(zhí)行完成的順序是隨機的。
Main dispatch queue 他是他是全局可用的serial queue ,他是在應(yīng)用程序主線,程序上執(zhí)行任務(wù)。
3.一般GCD 可以如下操作
dispatch_async(dispatch_er_global _queue(DISPATCH_QUEUE_PRIORity_DEFAULT,0)),^{
dispatch_async(dispatch_get_main_queue(),
}
dispatch_group_async可以實現(xiàn)監(jiān)聽一組任務(wù)是否完成,完成后得到通知執(zhí)行其他 的操作。 *這個方法很有用,比如你執(zhí)行三個下載任務(wù),當三個任務(wù)都下載完成后你才通知
37 多線程
1 開多線程
1.NSThread
2.GCD(重點) - Grand central Dispatch
NSOperation
2.開線程的方式
NSThread *thread= [NSThread alloc]initWithTarget:self selector:@selector(run) object:nil];
thread start];
直接啟動
【NSThread datachNewThreadSelector:@selector(run) toTatget:self withObject:nil】;
[self perfprmSelectorInbachround:@sekectir(run) WithObject:nil];
2.0 其他用法
NSThread thread = [NSthread CurrentThread];
+(NSThread)mianThread.
3>線程間的通信
performSwlectorOnMainThread...
2.GCD (重點)
1》隊列的類型
并發(fā)隊列
獲得全局的并發(fā)隊列:dispatch_get_global_queue 串行隊列
a。自己創(chuàng)建
dispatch_queue_cteate
b.主隊列
dispatch_get_main_queue
2>執(zhí)行任務(wù)的方法
同步 (sync)執(zhí)行 異步(async)執(zhí)行
3>了解隊列和方法和配合使用
4》 線程間通信
dispatch _ async()
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
dispatch_async(dispatch_get_main_queue())^{
}
}
5>其他用法
dispatch_once
dispatch_after
dispatch_group_async 和dispatch - group _notify
3.NSOperation
1> 基本使用
NSInvocationOperation
NSBlockOperation
2>NSOperationQueue
設(shè)置最大的并發(fā)數(shù)
-( void)setMaxConcurrentOperation:(NSInterger)op;
設(shè)置依賴
[operationb addDependency:operationA];
3>自己定義Operation的基本流程
4>如何解決網(wǎng)絡(luò)請求中的圖片重復(fù)下載的問題。