一些常見的ios知識點文章

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ù)下載的問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容