一些常見的IOS知識點_第1頁
一些常見的IOS知識點_第2頁
一些常見的IOS知識點_第3頁
一些常見的IOS知識點_第4頁
一些常見的IOS知識點_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、一些常見的IOS知識點1、堆和棧什么區(qū)別? 答:管理方式:對于棧來講,是由編譯器自動管理,無需我們手工控制;對于堆來說,釋放工作由程序員控制,容易產(chǎn)生memory leak。2、數(shù)組和鏈表什么區(qū)別? 答:數(shù)組是將元素在內(nèi)存中連續(xù)存放,由于每個元素占用內(nèi)存相同,可以通過下標(biāo)迅速訪問數(shù)組中任何元素。       鏈表恰好相反,鏈表中的元素在內(nèi)存中不是順序存儲的,而是通過存在元素中的指針聯(lián)系到一起。3、delegate和notification什么區(qū)別,什么情況使用?答:Delegate:  

2、0;     消息的發(fā)送者(sender)告知接收者(receiver)某個事件將要發(fā)生,delegate同意然然后發(fā)送者響應(yīng)事件,        delegate機(jī)制使得接收者可以改變發(fā)送者的行為。        通常發(fā)送者和接收者的關(guān)系是直接的一對多的關(guān)系。      Notification:      消息的發(fā)

3、送者告知接收者事件已經(jīng)發(fā)生或者將要發(fā)送,僅此而已,接收者并不能反過來影響發(fā)送者的行為。      通常發(fā)送者和接收者的關(guān)系是間接的多對多關(guān)系。4、什么是MVC,為什么使用MVC,有什么好處?答: 分別為: 模型(Model),視圖(View)和控制Controller)。          模型(Model) “數(shù)據(jù)模型”(Model)用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及對數(shù)據(jù)的處理方法。    &#

4、160;                           “模型”有對數(shù)據(jù)直接訪問的權(quán)力,例如對數(shù)據(jù)庫的訪問。          視圖(View) 視圖層能夠?qū)崿F(xiàn)數(shù)據(jù)有目的顯示。     

5、;     控制器(Controller) 控制器起到不同層面間的組織作用,用于控制應(yīng)用程序的流程。5、從一個數(shù)組中找出重復(fù)的元素打印出來   NSArray *arr = NSArrayarrayWithObjects:"1","2","1","7","4","5","2","6","5",nil;   &

6、#160;NSMutableArray *arrmu = NSMutableArrayallocinit;/過濾    NSMutableArray *sameArray = NSMutableArrayallocinit;/找出相同的   for (int i = 0  i < arrcount; i+)               id str = arr objec

7、tAtIndex:i;       if (arrmu count = 0)                    arrmuaddObject:str;               else           BOOL flag = NO;   

8、        for (int j = 0; j < arrmucount; j+ )                if (strisEqual:arrmu objectAtIndex:j)                                

9、60;   sameArrayaddObject:str;                    flag =YES;                   break;                               

10、else                    flag =NO;                                       if (flag = NO)               

11、;                  arrmuaddObject:str;                               NSLog("sameArray : %",sameArray);還有兩種直接找出的方法,上代碼:一:NSArray *arr = NSArrayarrayWithObje

12、cts:"1","2","1",nil;    NSSet *set = NSSetsetWithArray:arr;   NSLog("%",setallObjects);二:NSArray *arr =1,2,1;   NSMutableDictionary *dict = NSMutableDictionarydictionary;   for (NSNumber *nu

13、mberin arr)         dictsetObject:numberforKey:number;       NSLog("%",dictallValues);6、UITableView能否綁定多個數(shù)據(jù)源?答:不能7、一個UIViewController能否管理多個UITableView ?答:可以8、ios4、5、6相對于之前的版本添加了哪些新特性?  這個就比較多了,比如:拋棄谷歌地圖 新推Maps應(yīng)用 ,大幅加強中國本地化支持,Siri開口講普通話,通過iC

14、loud體驗分享樂趣,Passbook電子票券管理,隨時隨地的FaceTime,電話功能增強,Safari支持全屏瀏覽,Mail應(yīng)用新增VIP,萬能輔助:更強大等等了9、同步請求和異步請求什么區(qū)別?答:發(fā)送同步請求,程序?qū)⑼V褂脩艚换ィ敝练?wù)器返回數(shù)據(jù)完成,才可以進(jìn)行下一步操作,      異步請求不會阻塞主線程,而會建立一個新的線程來操作,用戶發(fā)出異步請求后,依然可以對UI進(jìn)行操作,程序可以繼續(xù)運行。10、iOS中的多線程操作、多線程方式答:iOS提供了方便的多線程調(diào)用機(jī)制:NSOperation和NSOperationQueue。它的使用

15、方法也很簡單,一般都是將NSOperation對象加入到NSOperationQueue隊列中,加入后隊列就開始處理,知道任務(wù)操作完成。11、UIViewController的生命周期答:當(dāng)一個視圖控制器被創(chuàng)建,并在屏幕上顯示的時候。 代碼的執(zhí)行順序      / 視圖顯示在屏幕上的順序     1、 alloc                    創(chuàng)建對象,分配空間。 &#

16、160;  2、init (initWithNibName)    初始化對象,初始化數(shù)據(jù)。    3、loadView                   從nib載入視圖, 這一步不需要去干涉。除非沒有使用xib文件創(chuàng)建視圖。    4、viewDidLoad   

17、             加載完畢,可以進(jìn)行自定義數(shù)據(jù)以及動態(tài)創(chuàng)建其他控件。    5、viewWillAppear             視圖將出現(xiàn)在屏幕之前,馬上這個視圖即將顯示在屏幕上。    6、viewDidAppear  &#

18、160;           視圖已在屏幕上渲染完成。    / 視圖將被從屏幕上移除的順序    1、viewWillDisappear          視圖將被從屏幕上移除之前執(zhí)行。    2、viewDidDisappear           視圖已

19、經(jīng)被從屏幕上移除。    3、dealloc                    視圖被銷毀,此時需要在init和viewDidLoad中創(chuàng)建的對象進(jìn)行釋放。    4、viewDidUnload              出現(xiàn)內(nèi)存警告在內(nèi)存不足時

20、執(zhí)行,并對所有非當(dāng)前顯示的controller執(zhí)行。      本視圖的所有子視圖將被銷毀,以釋放內(nèi)存,此時開發(fā)者需要手動對viewLoad、viewDidLoad中創(chuàng)建的對象釋放內(nèi)存。     因為當(dāng)這個視圖再次顯示在屏幕上的時候,viewLoad、viewDidLoad 再次被調(diào)用,以便再次構(gòu)造視圖。12、Autorerelease對象什么時候釋放?答:autorelease實際上只是把對release的調(diào)用延遲了,對于每一個Autorelease,系統(tǒng)只是把該Object放入了當(dāng)前的Aut

21、orelease pool中,當(dāng)該pool被釋放時,該pool中的所有Object會被調(diào)用Release。13、iOS數(shù)據(jù)持久化方式  答:四種:屬性列表、對象歸檔、SQLite3和Core Data 14、Objectc的類可以多重繼承么?可以實現(xiàn)多個接口么?Category是什么?重寫一個類的方式用繼承好還是分類好?為什么? 答:Object-c的類不可以多重繼承;可以實現(xiàn)多個接口,通過實現(xiàn)多個接口可以完成C+的多重繼承;Category是類別,一般情況用分類好,用Category去重寫類的方法,僅對本Category有效,不會影響到其他類與原有類的

22、關(guān)系。 15. #import 跟#include 又什么區(qū)別,class呢, import<> 跟 #import”"又什么區(qū)別? 答:#import是Objective-C導(dǎo)入頭文件的關(guān)鍵字,#include是C/C+導(dǎo)入頭文件的關(guān)鍵字,使 用#import頭文件會自動只導(dǎo)入一次,不會重復(fù)導(dǎo)入,相當(dāng)于#include和#pragma once;class告訴編譯器某個類的聲明,當(dāng)執(zhí)行時,才去查看類的實現(xiàn)文件,可以解決頭文件的相互包含;#import<>用來包含系 統(tǒng)的頭文件,#import”用來包含用戶頭文件。 16.屬性re

23、adwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那種情況下用? 答:readwrite 是可讀可寫特性;需要生成getter方法和setter方法時readonly 是只讀特性  只會生成getter方法 不會生成setter方法 不希望屬性在類外改變assign 是賦值特性,setter方法將傳入?yún)?shù)賦值給實例變量;僅設(shè)置變量時;retain 表示持有特性,setter方法將傳入?yún)?shù)先保留,再賦值,傳入?yún)?shù)的retaincount會+1;copy 表示賦值特性,setter方法將傳入對象復(fù)制一份;需要完

24、全一份新的變量時。nonatomic 非原子操作,決定編譯器生成的setter getter是否是原子操作,atomic表示多線程安全,一般使用nonatomic 17.常見的object-c的數(shù)據(jù)類型有那些, 和C的基本數(shù)據(jù)類型有什么區(qū)別?如:NSInteger和int 答:object-c的數(shù)據(jù)類型有 NSString,NSNumber,NSArray,NSMutableArray,NSData等等,這些都是class,創(chuàng)建后便是對象,而C語言的基本數(shù)據(jù)類型int,只是一定字節(jié)的內(nèi)存空間,用于存放數(shù)值;而object-c的NSNumber包含有父類NSObject的方法

25、和 NSNumber自己的方法,可以完成復(fù)雜的操作。 18.Objective-C如何對內(nèi)存管理的,說說你的看法和解決方法? 答:Objective-C的內(nèi)存管理主要有三種方式ARC(自動內(nèi)存計數(shù))、手動內(nèi)存計數(shù)、內(nèi)存池。 解決方法的話: 誰持有,誰釋放。 19.如何對iOS設(shè)備進(jìn)行性能測試? 答:Profile-> Instruments ->Time Profiler 20.Object C中創(chuàng)建線程的方法是什么?如果在主線程中執(zhí)行代碼,方法是什么?如果想延時執(zhí)行代碼、方法又是什么? 答:線程創(chuàng)建有三種方法:

26、使用NSThread創(chuàng)建、使用 GCD的dispatch、使用子類化的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ù)都是模型

27、層,它應(yīng)該獨立于視圖。所有的ViewController都是控制層,由它負(fù)責(zé)控制視圖,訪問模型數(shù)據(jù)。  22.定義屬性時,什么情況使用copy、assign、retain? 答:assign用于簡單數(shù)據(jù)類型,如NSInteger,double,bool, 其實還有后面的block等;       retain和copy用于對象,copy用于當(dāng)a指向一個對象,b也想指向同樣的對象的時候,如果用assign,a如果釋放,再調(diào)用b會crash,如果用copy 的方式,a和b各自有自己的內(nèi)存,  就可以

28、解決這個問題。       retain 會使計數(shù)器加一,也可以解決assign的問題。       另外:atomic和nonatomic用來決定編譯器生成的getter和setter是否為原子操作。在多線程環(huán)境下,原子操作是必要的,否則有可能引起錯誤的結(jié)果。       加了atomic,setter函數(shù)會變成下面這樣:       if (p

29、roperty != newValue)        property release;       property = newValue retain;        23. Object-C有私有方法嗎?私有變量呢? 答:objective-c 類里面的方法只有兩種, 靜態(tài)方法和實例方法,所有實例變量默認(rèn)都是私有的,所有實例方法默認(rèn)都是公有的。 24.淺拷貝和深拷貝區(qū)別

30、是什么 答:淺拷貝:只復(fù)制指向?qū)ο蟮闹羔槪粡?fù)制引用對象本身。 深拷貝:復(fù)制引用對象本身。 25.自動釋放池是什么,如何工作  答: 當(dāng)您向一個對象發(fā)送一個autorelease消息時,Cocoa就會將該對 象的一個引用放入到最新的自動釋放池。        它仍然是個正當(dāng)?shù)膶ο螅虼俗詣俞尫懦囟x的作用域內(nèi)的其它對象可以向它發(fā)送消息。當(dāng)程序執(zhí)行到作用域結(jié)束的位置時,        自動釋放池就會被釋放,

31、池中的所有對象也就被釋放。 26.單件實例是什么 答: Foundation 和 Application Kit 框架中的一些類只允許創(chuàng)建單件對象,即這些類在當(dāng)前進(jìn)程中的唯一實例。       舉例:NSFileManager 和NSWorkspace類在使用時都是基于進(jìn)程進(jìn)行單件對象的實例化。       當(dāng)向這些類請求實例的時候,它們會向您傳遞單一實例的一個引用,如果該實例還不存在,則首先進(jìn)行實例的分配 和初始化。 27.類別的作用

32、?繼承和類別在實現(xiàn)中有何區(qū)別? 答:category 可以在不獲悉,不改變原來代碼的情況下往里面添加新的方法,只能添加,不能刪除修改。      并且如果類別和原來類中的方法產(chǎn)生名稱沖突,則類別將覆蓋原來的方法,因為類別具有更高的優(yōu)先級。類別主要有3個作用:      (1)將類的實現(xiàn)分散到多個不同文件或多個不同框架中。      (2)創(chuàng)建對私有方法的前向引用。      (3)向?qū)ο筇砑臃钦?/p>

33、協(xié)議。       繼承可以增加,修改或者刪除方法,并且可以增加屬性。 28.類別和類擴(kuò)展的區(qū)別。 答:category和extensions的不同在于 后者可以添加屬性。另外后者添加的方法是必須要實現(xiàn)的。extensions可以認(rèn)為是一個私有的Category。 29.KVO and KVC? 答:kvc:鍵 - 值編碼是一種間接訪問對象的屬性,使用字符串來標(biāo)識屬性,而不是通過調(diào)用存取方法,直接或通過實例變量訪問的機(jī)制。很多情況下可以簡化程序代碼。apple文檔其實給了一個很好的例子。kvo:鍵值觀察機(jī)

34、制,他提供了觀察某一屬性變化的方法,極大的簡化了代碼。具體用看到用到過的一個地方是對于按鈕點擊變化狀態(tài)的的監(jiān)控。比如我自定義的一個buttoncpp self addObserver:self forKeyPath:"highlighted" options:0 context:nil;   #pragma mark KVO  - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)c

35、hange context:(void *)context       if (keyPath isEqualToString:"highlighted" )             self setNeedsDisplay;         對于系統(tǒng)是根據(jù)keypath去取的到相應(yīng)的值發(fā)生改變,理論上來說是和kvc機(jī)制的道理是一樣的。對于kvc機(jī)制如何通過

36、key尋找到value:“當(dāng)通過KVC調(diào)用對象時,比如:self valueForKey:”someKey”時,程序會自動試圖通過幾種不同的方式解析這個調(diào)用。首先查找對象是否帶有 someKey 這個方法,如果沒找到,會繼續(xù)查找對象是否帶有someKey這個實例變量(iVar),如果還沒有找到,程序會繼續(xù)試圖調(diào)用-(id) valueForUndefinedKey:這個方法。如果這個方法還是沒有被實現(xiàn)的話,程序會拋出一個NSUndefinedKeyException異常錯誤。         (注:Key-Valu

37、e Coding查找方法的時候,不僅僅會查找someKey這個方法,還會查找getsomeKey這個方法,前面加一個get,或者_(dá)someKey以及_getsomeKey這幾種形式。同時,查找實例變量的時候也會不僅僅查找someKey這個變量,也會查找_someKey這個變量是否存在。) 設(shè)計valueForUndefinedKey:方法的主要目的是當(dāng)你使用-(id)valueForKey方法從對象中請求值時,對象能夠在錯誤發(fā)生前,有最后的機(jī)會響應(yīng)這個請求。這樣做有很多好處,下面的兩個例子說明了這樣做的好處。“來至cocoa,這個說法應(yīng)該挺有道理。   

38、  因為我們知道button卻是存在一個highlighted實例變量.因此為何上面我們只是add一個相關(guān)的keypath就行了,     可以按照kvc查找的邏輯理解,就說的過去了。 30.代理的作用? 答:代理的目的是改變或傳遞控制鏈。允許一個類在某些特定時刻通知到其他類,而不需要獲取到那些類的指針。可以減少框架復(fù)雜度。另外一點,代理可以理解為java中的回調(diào)監(jiān)聽機(jī)制的一種類似。 31.說說響應(yīng)鏈答: 事件響應(yīng)鏈。包括點擊事件,畫面刷新事件等。在視圖棧內(nèi)從上至下,或者從下之上傳播。 32.f

39、rame和bounds有什么不同?答:frame指的是:該view在父view坐標(biāo)系統(tǒng)中的位置和大小。(參照點是父親的坐標(biāo)系統(tǒng))bounds指的是:該view在本身坐標(biāo)系統(tǒng)中 的位置和大小。(參照點是本身坐標(biāo)系統(tǒng)) 33.方法和選擇器有何不同?答:selector是一個方法的名字,method是一個組合體。 34.Objectc的類可以多重繼承么?可以實現(xiàn)多個接口么?重寫一個類的方式用繼承好還是分類好?為什么?答:Objective-c只支持單繼承,如果要實現(xiàn)多繼承的話,可以通過類別和協(xié)議的方式來實現(xiàn),cocoa 中所有的類都是NSObject 的子類,多繼承在這里是用pr

40、otocol 委托代理 來實現(xiàn)的。 35.ARC自動引用技術(shù)答:1.ARC是編譯特性,不是運行時特性,只是在編譯的時候,編譯器會自動加上釋放代碼    2.不能調(diào)用release、retain、autorelease、retainCount    3.dealloc注意     1> 不能在dealloc中調(diào)用super dealloc     2> 不能在dealloc中釋放資源   4.propert

41、y參數(shù)說明    1> retain 改為 strong    2> 基本數(shù)據(jù)類型(intfloat)還是用assign    3> copy 還是 copy    4> 如果2個對象循環(huán)引用,一端用strong,一端用weak    5> weak是用在對象上,weak其實作用跟assign相當(dāng)    5.ARC中只允許使用通過autoreleasepool 創(chuàng)建自動釋放池 

42、36 GCD技術(shù)答:Grand Central Dispatch簡稱GCD 解決多核并行運算的一種方案看代碼就行: /  Grand Central Dispatch簡稱GCD技術(shù)    / Do any additional setup after loading the view.    /    dispatch_queue_t newDispath = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);/ 

43、;   dispatch_async(newDispath, /        self downloadImage;/    );    /    #defineDISPATCH_QUEUE_PRIORITY_HIGH  2/    #defineDISPATCH_QUEUE_PRIORITY_DEFAULT  0/    #defineDISPATCH_QUEUE_PRIORITY_LOW (

44、-2)/    #defineDISPATCH_QUEUE_PRIORITY_BACKGROUNDINT16_MIN                   /*dispatch queue分為下面三種:    * Serial:又稱為private dispatch queues,同時只執(zhí)行一個任務(wù)。Serial queue通常用于同步訪問特定的資源或數(shù)據(jù)。當(dāng)你創(chuàng)建多   個   

45、;     Serial queue時,雖然它們各自是同步執(zhí)行的,但Serial queue與Serial queue之間是并發(fā)執(zhí)行的。    * Concurrent: 又稱為global dispatch queue,可以并發(fā)地執(zhí)行多個任務(wù),但是執(zhí)行完成的順序是隨機(jī)的。    * Main dispatch queue它是全局可用的serial queue,它是在應(yīng)用程序主線程上執(zhí)行任務(wù)的    */       /  一般GCD&

46、#160;可以如下操作       dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),         / 耗時的操作       dispatch_async(dispatch_get_main_queue(),             / 更新界面  &

47、#160;     );    );        selfexampleDispatch;        /*     *系統(tǒng)給每一個應(yīng)用程序提供了三個concurrent dispatch queues。     *這三個并發(fā)調(diào)度隊列是全局的,它們只有優(yōu)先級的不同。     *因為是全局的,我們不需要去創(chuàng)建。我們只需要通過使用函數(shù)dispath_get_

48、global_queue去得到隊列     */       dispatch_queue_t globalQ =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);         NSLog("global:%p",globalQ);    dispatch_queue_t mainQ =dispatch_get_main_queue();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論