一些ios的知識點

1、堆和棧什么區別?

答:管理方式:對于棧來講,是由編譯器自動管理,無需我們手工控制;對于堆來說,釋放工作由程序員控制,容易產生memory leak。

2、數組和鏈表什么區別?

答:數組是將元素在內存中連續存放,由于每個元素占用內存相同,可以通過下標迅速訪問數組中任何元素。

鏈表恰好相反,鏈表中的元素在內存中不是順序存儲的,而是通過存在元素中的指針聯系到一起。

3、delegate和notification什么區別,什么情況使用?

答:

Delegate:消息的發送者(sender)告知接收者(receiver)某個事件將要發生,delegate同意然后發送者響應事件,

delegate機制使得接收者可以改變發送者的行為。

通常發送者和接收者的關系是直接的一對多的關系。

Notification:

消息的發送者告知接收者事件已經發生或者將要發送,僅此而已,接收者并不能反過來影響發送者的行為。

通常發送者和接收者的關系是間接的多對多關系。

4、什么是MVC,為什么使用MVC,有什么好處?

答: 分別為: 模型(Model),視圖(View)和控制Controller)。

模型(Model) “數據模型”(Model)用于封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法。

“模型”有對數據直接訪問的權力,例如對數據庫的訪問。

視圖(View) 視圖層能夠實現數據有目的顯示。

控制器(Controller) 控制器起到不同層面間的組織作用,用于控制應用程序的流程。

5、從一個數組中找出重復的元素打印出來

NSArray *arr = [NSArrayarrayWithObjects:@"1",@"2",@"1",@"7",@"4",@"5",@"2",@"6",@"5",nil];

NSMutableArray *arrmu = [[NSMutableArrayalloc]init];//過濾

NSMutableArray *sameArray = [[NSMutableArrayalloc]init];//找出相同的

for (int i = 0 ; i < [arrcount]; i++) {

id str = [arr objectAtIndex:i];

if ([arrmu.count] == 0)

{

[arrmuaddObject:str];

}

else{

BOOL flag = NO;

for (int j = 0; j < [arrmucount]; j++ ) {

if ([strisEqual:[arrmu objectAtIndex:j]])

{

[sameArrayaddObject:str];

flag =YES;

break;

}

else{

flag =NO;

}

}

if (flag == NO) {

[ arrmuaddObject:str];

}

}

}

NSLog(@"sameArray : %@",sameArray);

還有兩種直接找出的方法,上代碼:

一:

NSArray *arr = [NSArrayarrayWithObjects:@"1",@"2",@"1",nil];

NSSet *set = [NSSetsetWithArray:arr];

NSLog(@"%@",[setallObjects]);

二:

NSArray *arr =@[@1,@2,@1];

NSMutableDictionary *dict = [NSMutableDictionarydictionary];

for (NSNumber *numberin arr) {

[dictsetObject:numberforKey:number];

}

NSLog(@"%@",[dictallValues]);

6、UITableView能否綁定多個數據源?

答:不能

7、一個UIViewController能否管理多個UITableView ?

答:可以

8、ios4、5、6相對于之前的版本添加了哪些新特性?

這個就比較多了,比如:拋棄谷歌地圖 新推Maps應用 ,大幅加強中國本地化支持,Siri開口講普通話,通過iCloud體驗分享樂趣,Passbook電子票券管理,隨時隨地的FaceTime,電話功能增強,Safari支持全屏瀏覽,Mail應用新增VIP,萬能輔助:更強大等等了

9、同步請求和異步請求什么區別?

答:發送同步請求,程序將停止用戶交互,直至服務器返回數據完成,才可以進行下一步操作,

異步請求不會阻塞主線程,而會建立一個新的線程來操作,用戶發出異步請求后,依然可以對UI進行操作,程序可以繼續運行。

10、iOS中的多線程操作、多線程方式

答:iOS提供了方便的多線程調用機制:NSOperation和NSOperationQueue。它的使用方法也很簡單,

一般都是將NSOperation對象加入到NSOperationQueue隊列中,加入后隊列就開始處理,知道任務操作完成。

11、UIViewController的生命周期

答:當一個視圖控制器被創建,并在屏幕上顯示的時候。 代碼的執行順序

// 視圖顯示在屏幕上的順序

1、 alloc創建對象,分配空間。

2、init (initWithNibName)初始化對象,初始化數據。

3、loadView從nib載入視圖, 這一步不需要去干涉。除非沒有使用xib文件創建視圖。

4、viewDidLoad加載完畢,可以進行自定義數據以及動態創建其他控件。

5、viewWillAppear視圖將出現在屏幕之前,馬上這個視圖即將顯示在屏幕上。

6、viewDidAppear視圖已在屏幕上渲染完成。

// 視圖將被從屏幕上移除的順序

1、viewWillDisappear視圖將被從屏幕上移除之前執行。

2、viewDidDisappear視圖已經被從屏幕上移除。

3、dealloc視圖被銷毀,此時需要在init和viewDidLoad中創建的對象進行釋放。

4、viewDidUnload出現內存警告在內存不足時執行,并對所有非當前顯示的controller執行。

本視圖的所有子視圖將被銷毀,以釋放內存,此時開發者需要手動對viewLoad、viewDidLoad中創建的對象釋放內存。

因為當這個視圖再次顯示在屏幕上的時候,viewLoad、viewDidLoad 再次被調用,以便再次構造視圖。

12、Autorerelease對象什么時候釋放?

答:autorelease實際上只是把對release的調用延遲了,對于每一個Autorelease,系統只是把該Object放入了當前的Autorelease pool中,當該pool被釋放時,該pool中的所有Object會被調用Release。

13、iOS數據持久化方式

答:四種:屬性列表、對象歸檔、SQLite3和Core Data

14、Object-c的類可以多重繼承么?可以實現多個接口么?Category是什么?重寫一個類的方式用繼承好還是分類好?為什么?

答:Object-c的類不可以多重繼承;可以實現多個接口,通過實現多個接口可以完成C++的多重繼承;Category是類別,一般情況用分類好,用Category去重寫類的方法,僅對本Category有效,不會影響到其他類與原有類的關系。

15. #import 跟#include 又什么區別,@class呢, #import<> 跟 #import”"又什么區別?

答:

#import是Objective-C導入頭文件的關鍵字;

#include是C/C++導入頭文件的關鍵字,使 用#import頭文件會自動只導入一次,不會重復導入,相當于#include和#pragma once;

@class告訴編譯器某個類的聲明,當執行時,才去查看類的實現文件,可以解決頭文件的相互包含;

#import<>用來包含系 統的頭文件,#import””用來包含用戶頭文件。

16.屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那種情況下用?

答:readwrite 是可讀可寫特性;需要生成getter方法和setter方法時

readonly 是只讀特性只會生成getter方法 不會生成setter方法 ;不希望屬性在類外改變

assign 是賦值特性,setter方法將傳入參數賦值給實例變量;僅設置變量時;

retain 表示持有特性,setter方法將傳入參數先保留,再賦值,傳入參數的retaincount會+1;

copy 表示賦值特性,setter方法將傳入對象復制一份;需要完全一份新的變量時。

nonatomic 非原子操作,決定編譯器生成的setter getter是否是原子操作,atomic表示多線程安全,一般使用nonatomic

17.常見的object-c的數據類型有那些, 和C的基本數據類型有什么區別?如:NSInteger和int

答:object-c的數據類型有 NSString,NSNumber,NSArray,NSMutableArray,NSData等等,這些都是class,創建后便是對象,而C語言的基本數據類型int,只是一定字節的內存空間,用于存放數值;而object-c的NSNumber包含有父類NSObject的方法和 NSNumber自己的方法,可以完成復雜的操作。

18.Objective-C如何對內存管理的,說說你的看法和解決方法?

答:Objective-C的內存管理主要有三種方式ARC(自動內存計數)、手動內存計數、內存池。

解決方法的話: 誰持有,誰釋放。

19.如何對iOS設備進行性能測試?

答:Profile-> Instruments ->Time Profiler

20.Object C中創建線程的方法是什么?如果在主線程中執行代碼,方法是什么?如果想延時執行代碼、方法又是什么?

答:線程創建有三種方法:使用NSThread創建、使用 GCD的dispatch、使用子類化的NSOperation,然后將其加入NSOperationQueue;在主線程執行代碼,方法是 performSelectorOnMainThread,如果想延時執行代碼可以用performSelector:onThread:withObject:waitUntilDone:

21.描述一下iOS SDK中如何實現MVC的開發模式

答:MVC是:模型--視圖--控制開發模式,對于iOS SDK,所有的View都是視圖層的,它應該獨立于模型層,由視圖控制層來控制。所有的用戶數據都是模型層,它應該獨立于視圖。所有的ViewController都是控制層,由它負責控制視圖,訪問模型數據。

22.定義屬性時,什么情況使用copy、assign、retain?

答:

assign用于簡單數據類型,如NSInteger,double,bool, 其實還有后面的block等;

retain和copy用于對象,copy用于當a指向一個對象,b也想指向同樣的對象的時候,如果用assign,a如果釋放,再調用b會crash,如果用copy 的方式,a和b各自有自己的內存,就可以解決這個問題。

retain 會使計數器加一,也可以解決assign的問題。

另外:atomic和nonatomic用來決定編譯器生成的getter和setter是否為原子操作。在多線程環境下,原子操作是必要的,否則有可能引起錯誤的結果。

加了atomic,setter函數會變成下面這樣:

if (property != newValue) {

[property release];

property = [newValue retain];

}

23. Object-C有私有方法嗎?私有變量呢?

答:objective-c – 類里面的方法只有兩種, 靜態方法和實例方法,所有實例變量默認都是私有的,所有實例方法默認都是公有的。

24.淺拷貝和深拷貝區別是什么

答:淺拷貝:只復制指向對象的指針,而不復制引用對象本身。

深拷貝:復制引用對象本身。

25.自動釋放池是什么,如何工作

答: 當您向一個對象發送一個autorelease消息時,Cocoa就會將該對 象的一個引用放入到最新的自動釋放池。

它仍然是個正當的對象,因此自動釋放池定義的作用域內的其它對象可以向它發送消息。當程序執行到作用域結束的位置時

自動釋放池就會被釋放,池中的所有對象也就被釋放。

26.單件實例是什么

答: Foundation 和 Application Kit 框架中的一些類只允許創建單件對象,即這些類在當前進程中的唯一實例。

舉例:NSFileManager 和NSWorkspace類在使用時都是基于進程進行單件對象的實例化。

當向這些類請求實例的時候,它們會向您傳遞單一實例的一個引用,如果該實例還不存在,則首先進行實例的分配 和初始化。

27.類別的作用?繼承和類別在實現中有何區別?

答:category 可以在不獲悉,不改變原來代碼的情況下往里面添加新的方法,只能添加,不能刪除修改。

并且如果類別和原來類中的方法產生名稱沖突,則類別將覆蓋原來的方法,因為類別具有更高的優先級。

類別主要有3個作用:

(1)將類的實現分散到多個不同文件或多個不同框架中。

(2)創建對私有方法的前向引用。

(3)向對象添加非正式協議。

繼承可以增加,修改或者刪除方法,并且可以增加屬性。

28.類別和類擴展的區別。

答:category和extensions的不同在于 后者可以添加屬性。另外后者添加的方法是必須要實現的。

extensions可以認為是一個私有的Category。

29.KVO and KVC?

答:kvc:鍵 - 值編碼是一種間接訪問對象的屬性,使用字符串來標識屬性,而不是通過調用存取方法,直接或通過實例變量訪問的機制。

很多情況下可以簡化程序代碼。apple文檔其實給了一個很好的例子。

kvo:鍵值觀察機制,他提供了觀察某一屬性變化的方法,極大的簡化了代碼。

具體用看到用到過的一個地方是對于按鈕點擊變化狀態的的監控。

比如我自定義的一個button

[cpp]

[self addObserver:self forKeyPath:@"highlighted" options:0 context:nil];

#pragma mark KVO

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

if ([keyPath isEqualToString:@"highlighted"] ) {

[self setNeedsDisplay];

}

}

對于系統是根據keypath去取的到相應的值發生改變,理論上來說是和kvc機制的道理是一樣的。

對于kvc機制如何通過key尋找到value:

“當通過KVC調用對象時,比如:[self valueForKey:@”someKey”]時,程序會自動試圖通過幾種不同的方式解析這個調用。首先查找對象是否帶有 someKey 這個方法,如果沒找到,會繼續查找對象是否帶有someKey這個實例變量(iVar),如果還沒有找到,程序會繼續試圖調用

-(id) valueForUndefinedKey:這個方法。如果這個方法還是沒有被實現的話,程序會拋出一個NSUndefinedKeyException異常錯誤。

(cocoachina.com注:Key-Value Coding查找方法的時候,不僅僅會查找someKey這個方法,還會查找getsomeKey這個方法,前面加一個get,或者_someKey以及_getsomeKey這幾種形式。同時,查找實例變量的時候也會不僅僅查找someKey這個變量,也會查找_someKey這個變量是否存在。)

設計valueForUndefinedKey:方法的主要目的是當你使用-(id)valueForKey方法從對象中請求值時,對象能夠在錯誤發生前,有最后的機會響應這個請求。這樣做有很多好處,下面的兩個例子說明了這樣做的好處。“

來至cocoa,這個說法應該挺有道理。

因為我們知道button卻是存在一個highlighted實例變量.因此為何上面我們只是add一個相關的keypath就行了,

可以按照kvc查找的邏輯理解,就說的過去了。

30.代理的作用?

答:代理的目的是改變或傳遞控制鏈。允許一個類在某些特定時刻通知到其他類,而不需要獲取到那些類的指針。可以減少框架復雜度。

另外一點,代理可以理解為java中的回調監聽機制的一種類似。

31.說說響應鏈

答: 事件響應鏈。包括點擊事件,畫面刷新事件等。在視圖棧內從上至下,或者從下之上傳播。

32.frame和bounds有什么不同?

答:frame指的是:該view在父view坐標系統中的位置和大小。(參照點是父親的坐標系統)

bounds指的是:該view在本身坐標系統中 的位置和大小。(參照點是本身坐標系統)

33.方法和選擇器有何不同?

答:selector是一個方法的名字,method是一個組合體。

34.Object-c的類可以多重繼承么?可以實現多個接口么?重寫一個類的方式用繼承好還是分類好?為什么?

答:Objective-c只支持單繼承,如果要實現多繼承的話,可以通過類別和協議的方式來實現,cocoa 中所有的類都是NSObject 的子類,多繼承在這里是用protocol 委托代理 來實現的。

35.ARC自動引用技術

答:1.ARC是編譯特性,不是運行時特性,只是在編譯的時候,編譯器會自動加上釋放代碼

2.不能調用release、retain、autorelease、retainCount

3.dealloc注意

1> 不能在dealloc中調用[super dealloc]

2> 不能在dealloc中釋放資源

4.@property參數說明

1> retain 改為 strong

2> 基本數據類型(int\float)還是用assign

3> copy 還是 copy

4> 如果2個對象循環引用,一端用strong,一端用weak

5> weak是用在對象上,weak其實作用跟assign相當

5.ARC中只允許使用通過@autoreleasepool {}創建自動釋放池

36 GCD技術

答:Grand Central Dispatch簡稱GCD 解決多核并行運算的一種方案

看代碼就行:

//Grand Central Dispatch簡稱GCD技術

// Do any additional setup after loading the view.

//dispatch_queue_t newDispath = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

//dispatch_async(newDispath, ^{

//[self downloadImage];

//});

//#defineDISPATCH_QUEUE_PRIORITY_HIGH2

//#defineDISPATCH_QUEUE_PRIORITY_DEFAULT0

//#defineDISPATCH_QUEUE_PRIORITY_LOW (-2)

//#defineDISPATCH_QUEUE_PRIORITY_BACKGROUNDINT16_MIN

/*dispatch queue分為下面三種:

* Serial:又稱為private dispatch queues,同時只執行一個任務。Serial queue通常用于同步訪問特定的資源或數據。當你創建多個Serial queue時,雖然它們各自是同步執行的,但Serial queue與Serial queue之間是并發執行的。

* Concurrent: 又稱為global dispatch queue,可以并發地執行多個任務,但是執行完成的順序是隨機的。

* Main dispatch queue它是全局可用的serial queue,它是在應用程序主線程上執行任務的

*/

//一般GCD 可以如下操作

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

// 耗時的操作

dispatch_async(dispatch_get_main_queue(), ^{

// 更新界面

});

});

[selfexampleDispatch];

/*

*系統給每一個應用程序提供了三個concurrent dispatch queues。

*這三個并發調度隊列是全局的,它們只有優先級的不同。

*因為是全局的,我們不需要去創建。我們只需要通過使用函數dispath_get_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();

NSLog(@"mainQ:%p",mainQ);

/*

*雖然dispatch queue是引用計數的對象,但是以上兩個都是全局的隊列,不用retain或release。

*/

/*

*dispatch_group_async可以實現監聽一組任務是否完成,完成后得到通知執行其他的操作。

*這個方法很有用,比如你執行三個下載任務,當三個任務都下載完成后你才通知界面說完成的了。

*/

timeInt = 0;

[NSTimerscheduledTimerWithTimeInterval:1

target:self

selector:@selector(checkingTime)

userInfo:nil

repeats:YES];

[selfexampleDispath_group];

/*dispatch_barrier_async的使用

*dispatch_barrier_async是在前面的任務執行結束后它才執行,而且它后面的任務等它執行完成之后才會執行

*/

[selfexampleDispatch_barrier];

/*dispatch_apply

*執行某個代碼片段N次。

*/

dispatch_apply(5, globalQ, ^(size_t index) {

// 執行5次

});

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

推薦閱讀更多精彩內容

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,197評論 30 471
  • __block和__weak修飾符的區別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,354評論 0 6
  • 多線程、特別是NSOperation 和 GCD 的內部原理。運行時機制的原理和運用場景。SDWebImage的原...
    LZM輪回閱讀 2,025評論 0 12
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 1,999評論 0 7
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,373評論 0 35