日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

原 iOS面试题收集

發(fā)布時(shí)間:2025/4/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 原 iOS面试题收集 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原 iOS面試題收集

發(fā)表于2年前(2013-07-22 13:47)?? 閱讀(369)?|?評論(0)?4人收藏此文章,?我要收藏 0

聽云性能監(jiān)測產(chǎn)品App、Server、CDN免費(fèi)試用,綁定賬號送京東卡

iOS?面試題?Objective-C

?

1.ARC 是什么??

ARC 是 iOS 5 推出的新功能,全稱叫 ARC(Automatic Reference Counting)。簡單 地說,就是代碼中自動加入了 retain/release,原先需要手動添加的用來處理內(nèi)存管 理的引用計(jì)數(shù)的代碼可以自動地由編譯器完成了。

該機(jī)能在 iOS 5/ Mac OS X 10.7 開始導(dǎo)入,利用 Xcode4.2 可以使用該機(jī)能。簡單 地理解 ARC,就是通過指定的語法,讓編譯器(LLVM 3.0)在編譯代碼時(shí),自動生成 實(shí)例的引用計(jì)數(shù)管理部分代碼。有一點(diǎn),ARC 并不是 GC,它只是一種代碼靜態(tài)分 析(Static Analyzer)工具。??

?

2.單實(shí)例架構(gòu):只需要一個實(shí)例。
查找文件:
例如:NSFileManager *manager;
manager = [NSFileManager defaultManager];
defaultManager 可以為我們創(chuàng)建一個屬于我們自己的 NSFileManger 對象。?

?

NSString *home = [@"~" stringByExpandingTildeInPath];將~替換成當(dāng)前用戶的主 目錄。?

NSDirectoryEnumerator *direnum = [manager enumeratorAtPath:home];返回一個 NSDictionaryEnumerator,它是 NSEnumerator 的子類。每次在這個枚舉器對象中 調(diào)用 nextObject 時(shí),都會返回該目錄中得一個文件的另一個路徑。??

?

?

3.自動釋放池的銷毀時(shí)間
在我們一直使用的 Foudation 庫工具中,創(chuàng)建和銷毀自動釋放池的方法非常明確: NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc] init];
...
[pool release];?

創(chuàng)建一個自動釋放池時(shí),該池自動成為活動的池。釋放該池時(shí),其保留計(jì)數(shù)器值歸 0 ,然后該池被銷毀。在銷毀的過程中,該池釋放其包含的所有對象。當(dāng)使用 Application Kit 時(shí),cocoa 定期自動為你創(chuàng)建和銷毀自動釋放池。通常是在程序處理 完當(dāng)前事件以后執(zhí)行這些操作。你可以使用任意多得自動釋放對象,當(dāng)不再使用它 們時(shí),自動釋放池將自動為你清理這些對象。?

你可能已經(jīng)在 xcode 自動生成代碼中遇見過另一種銷毀自動釋放池中對象的方式:- drain 方法。該方法只是清空自動釋放池而不是銷毀它。并且只適用于 mac os x10.4 以上的版本。?

4.自動釋放池的工作過程?

我們在任何時(shí)候向一個對象發(fā)送 autorelease 消息,該對象都會唄添加到這個自動釋 放池中。被加入到自動釋放池的對象的引用計(jì)數(shù)器值不會變化。當(dāng)自動釋放池被銷 毀時(shí)(向自動釋放池發(fā)送 release 消息,自動釋放池的引用計(jì)數(shù)器值變?yōu)?0,調(diào)用自身 的 dealloc 函數(shù)),會調(diào)用自身的 dealloc 函數(shù),會向池中得對象發(fā)送 release 消息。??

?

?

5.響應(yīng)者鏈?zhǔn)鞘裁?br />響應(yīng)者鏈?zhǔn)?Application Kit 事件處理架構(gòu)的中心機(jī)制。它由一系列鏈接在一起的響?

應(yīng)者對象組成,事件或者動作消息可以沿著這些對象進(jìn)行傳遞。如圖 6-20 顯示的那 樣,如果一個響應(yīng)者對象不能處理某個事件或動作-也就是說,它不響應(yīng)那個消息 ,或者不認(rèn)識那個事件,則將該消息重新發(fā)送給鏈中的下一個響應(yīng)者。消息沿著響 應(yīng)者鏈向上、向更高級別的對象傳遞,直到最終被處理(如果最終還是沒有被處理 ,就會被拋棄)。?

當(dāng) Application Kit 在應(yīng)用程序中構(gòu)造對象時(shí),會為每個窗口建立響應(yīng)者鏈。響應(yīng)者 鏈中的基本對象是 NSWindow 對象及其視圖層次。在視圖層次中級別較低的視圖將 比級別更高的視圖優(yōu)先獲得處理事件或動作消息的機(jī)會。NSWindow 中保有一個第 一響應(yīng)者的引用,它通常是當(dāng)前窗口中處于選擇狀態(tài)的視圖,窗口通常把響應(yīng)消息 的機(jī)會首先給它。對于事件消息,響應(yīng)者鏈通常以發(fā)生事件的窗口對應(yīng)的 NSWindow 對象作為結(jié)束,雖然其它對象也可以作為下一個響應(yīng)者被加入到 NSWindow 對象的后面。??

?

?

?

7.timer 的間隔周期準(zhǔn)嗎?為什么?怎樣實(shí)現(xiàn)一個精準(zhǔn)的 timer??

NSTimer 可以精確到 50-100 毫秒.?

NSTimer 不是絕對準(zhǔn)確的,而且中間耗時(shí)或阻塞錯過下一個點(diǎn),那么下一個點(diǎn)就 pass?

?

?

過去了??

?

?

8.Difference between shallow copy and deep copy??

淺復(fù)制和深復(fù)制的區(qū)別? 答案:淺層復(fù)制:只復(fù)制指向?qū)ο蟮闹羔?而不復(fù)制引用對象本身。 深層復(fù)制:復(fù)制引用對象本身。
意思就是說我有個 A 對象,復(fù)制一份后得到 A_copy 對象后,對于淺復(fù)制來說,A 和 A_copy 指向的是同一個內(nèi)存資源,復(fù)制的只不過是是一個指針,對象本身資源 還是只有一份,那如果我們對 A_copy 執(zhí)行了修改操作,那么發(fā)現(xiàn) A 引用的對象同樣 被修改,這其實(shí)違背了我們復(fù)制拷貝的一個思想。深復(fù)制就好理解了,內(nèi)存中存在了 兩份獨(dú)立對象本身。
用網(wǎng)上一哥們通俗的話將就是: 淺復(fù)制好比你和你的影子,你完蛋,你的影子也完蛋 深復(fù)制好比你和你的克隆人,你完蛋,你的克隆人還活著。??

?

?

9.Difference between categories and extensions??

類別和類擴(kuò)展的區(qū)別。?

答案:category 和 extensions 的不同在于后者可以添加屬性。另外后者添加的方法?

是必須要實(shí)現(xiàn)的。?

extensions 可以認(rèn)為是一個私有的 Category。??

10.What are KVO and KVC?
答案:kvc:鍵 - 值編碼是一種間接訪問對象的屬性使用字符串來標(biāo)識屬性,而不是通 過調(diào)用存取方法,直接或通過實(shí)例變量訪問的機(jī)制。 很多情況下可以簡化程序代碼。apple 文檔其實(shí)給了一個很好的例子。 kvo:鍵值觀察機(jī)制,他提供了觀察某一屬性變化的方法,極大的簡化了代碼。 具體用看到嗯哼用到過的一個地方是對于按鈕點(diǎn)擊變化狀態(tài)的的監(jiān)控。 比如我自定義的一個 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];?

} }?

對于系統(tǒng)是根據(jù) keypath 去取的到相應(yīng)的值發(fā)生改變,理論上來說是和 kvc 機(jī)制的 道理是一樣的。
對于 kvc 機(jī)制如何通過 key 尋找到 value:
“當(dāng)通過 KVC 調(diào)用對象時(shí),比如:[self valueForKey:@”someKey”]時(shí),程序會 自動試圖通過幾種不同的方式解析這個調(diào)用。首先查找對象是否帶有 someKey 這個 方法,如果沒找到,會繼續(xù)查找對象是否帶有 someKey 這個實(shí)例變量(iV ar),如 果還沒有找到,程序會繼續(xù)試圖調(diào)用 -(id) valueForUndefinedKey:這個方法。如果 這個方法還是沒有被實(shí)現(xiàn)的話,程序會拋出一個 NSUndefinedKeyException 異常錯 誤。?

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

設(shè)計(jì) valueForUndefinedKey:方法的主要目的是當(dāng)你使用-(id)valueForKey 方法從對 象中請求值時(shí),對象能夠在錯誤發(fā)生前,有最后的機(jī)會響應(yīng)這個請求。這樣做有很 多好處,下面的兩個例子說明了這樣做的好處。“
來至 cocoa,這個說法應(yīng)該挺有道理。?

因?yàn)槲覀冎?button 卻是存在一個 highlighted 實(shí)例變量.因此為何上面我們只是 add 一個相關(guān)的 keypath 就行了,
可以按照 kvc 查找的邏輯理解,就說的過去了。??

11.Difference between frame and bounds??

frame 和 bounds 有什么不同??

答案:frame 指的是:該 view 在父 view 坐標(biāo)系統(tǒng)中的位置和大小。(參照點(diǎn)是父親?

的坐標(biāo)系統(tǒng))?

bounds 指的是:該 view 在本身坐標(biāo)系統(tǒng)中 的位置和大小。(參照點(diǎn)是本身坐標(biāo)系?

?

?

?

12.方法調(diào)度 當(dāng)向一個對象發(fā)送消息時(shí)(調(diào)用方法),這個方法是怎么被調(diào)用的呢?這就依賴于方法?

高度程序,方法調(diào)度程序查找的方法如下:?

在本類的方法中,找被調(diào)用的方法,如果找到了,就調(diào)用,如果找不到被沿著繼承 路徑去查找,從哪個類找到,就調(diào)用哪個類的方法,如果到最根上的類還是沒有找 到,那編譯就會出錯。?

13.繼承與復(fù)合
在 Objective-C 中支持繼承,但只是支持單一繼承(有且只有一個父類有),如果想使 用多繼承的特性,可以使用分類和協(xié)議技術(shù)。?

繼承是 is-a,復(fù)合是 has-a。復(fù)合是通過包含指向?qū)ο蟮闹羔槍?shí)現(xiàn)的,嚴(yán)格意義上講, 復(fù)合是針對于對象間來說,對于基本數(shù)據(jù)類型來說,它們被認(rèn)為是對象的一部分。?

14.裝箱與拆箱
由于 NSArray,NSDirectory 等類不能直接存儲基本數(shù)據(jù)類型,所以要想在 NSArray?

\NSDirectory 中使用基本數(shù)據(jù)類型,就得使用裝箱與拆箱。?

在 Objective-C 中,可以使用 NSNumber 和 NSValue 來實(shí)現(xiàn)對數(shù)據(jù)類型的包裝, NSNumber 可以實(shí)現(xiàn)對基本數(shù)據(jù)類型的包裝,NSV alue 可以實(shí)現(xiàn)對任意類型數(shù)據(jù)的 包裝。?

將基本類型封裝成對象叫裝箱,從封裝的對象中提取基本類型叫拆箱(取消裝箱),其 它語言如 Java 原生支持裝箱與拆箱,Ojbective-C 不支持自動裝箱與拆箱,如果需 要得需要自己來實(shí)現(xiàn)裝箱與拆箱。?

15.便利初始化?

當(dāng)一個類需要根據(jù)不同的情況來初始化數(shù)據(jù)成員時(shí),就需要便利初始化函數(shù),與 init 初始化不同的是,便利初始化函數(shù)有參數(shù),參數(shù)個數(shù)可以有 1 到N個,N是類數(shù)據(jù) 成員個數(shù)。?

指定初始化函數(shù):什么是指定初始化函數(shù)?在類中,某個初始化函數(shù)會被指定為指 定的初始化函數(shù),確定指定初始化函數(shù)的規(guī)則是初始化函數(shù)中,參數(shù)最多的為指定 初始化函數(shù),?

其它未被指定為指定初始化函數(shù)的初始化函數(shù)要調(diào)用指定初始化函數(shù)來實(shí)現(xiàn)。對于 該類的子類也是一樣,只要重寫或者直接使用父類的指定初始化函數(shù)。上述文字有 些繞,來個例子吧?

@interface?A{?

int x; int y; }?

-(id) init;
-(id) initWithX:(int) xValue; -(id) initWithY:(int) yValue; -(id) initWithXY:(int) xValue?

yVal:(int) yValue;?

@end

這里 initWithXY 被確定為指定初始化函數(shù)。 -(id) initWithXY:(int) xValue
yVal:(int) yValue{?

if (self = [super init]){ x = xValue;
y = yValue;
}?

return self; }?

-(id) init{
if (self = self initWithXY:10 yVal:20){
}
return self;
}
.......?

@interface?B: A{?

int z;?

}?

-(jd) initWithXY......;?

@end

@implementation B?

-(id) initWithXY:(int) xValue yVal:(int) yValue{?

if (self = [super initWithXY:10 yVal=20]){
z= 40;
}?

return self; }
@end??

?

?

?

?

?

16.cocoa
cocoa 實(shí)際上是由 2 個不同的框架組成的:Foundation Kit 和 Application Kit。?

Application Kit 包含了所有的用戶接口對象和高級類。??

?

17.NSRange
typedef struct _NSRange { unsigned int location; unsigned int length; }NSRange;?

這個結(jié)構(gòu)體用來表示相關(guān)事務(wù)的范圍,通常是字符串里的字符范圍或者數(shù)組里的元 素范圍。??

18.三種賦值方式
1.NSRange range;
range.location = 17;
range.length = 4;
2.C 語言的聚合結(jié)構(gòu)賦值機(jī)制
NSRange range = {17, 4};
3.Cocoa 提供的一個快捷函數(shù) NSMakeRange() NSRange range = NSMakeRange(17, 4);?

使用 NSMakeRange()的好處是你可以在任何能夠使用函數(shù)的地方使用它,例如在方 法調(diào)用中將其當(dāng)成參數(shù)傳遞。??

19.幾何數(shù)據(jù)類型
1.NSPoint 代表笛卡兒平面中得一個點(diǎn)(x, y).?

typedef struct _NSPoint { float x;
float y;
}NSPoint;?

2.NSSize 用來存儲長度和寬度 typedef struct NSSize {
float width;
float height;?

}NSSize;?

3.NSRect 矩形數(shù)據(jù)類型,它是由點(diǎn)和大小復(fù)合而成 typedef struct _NSRect {
NSPoint origin;??

?

?

20.字符串 NSString stringWithFormat:就是一個工廠方法,它根據(jù)你提供的參數(shù)創(chuàng)建新對象。 length:長度
isEqualToString:比較字符串內(nèi)容是否相同 compart:將接受對象和傳遞來的字符串逐個字符的進(jìn)行比較。返回一個 enum 數(shù)據(jù) NSCaseInsensitiveSearch:不區(qū)分大小寫字符。 NSLiteralSearch:進(jìn)行完全比較,區(qū)分大小寫 NSNumericSearch:比較字符串的字符個數(shù),而不是字符值。 -(NSRange)rangeOfString:(NSString *)aString;
返回的 range.start 為開始位置,range.length 為長度。??

?

21.NSMutableString 可變字符串。 stringWithCapacity:創(chuàng)建一個新的 NSMutableString?

字符串的大小并不僅限于所提供的容量,這個容量僅是個最優(yōu)值。如果要創(chuàng)建一個 40mb 的字符串。?

NSMutableString *str = [NSMutableString stringWithCapacity:42]; appendString 接受參數(shù) aString,然后將其復(fù)制到接收對象的末尾。?

appendFormat 與 stringWithFormat:類似,但它將格式化的字符串附加在接收字符 串的末尾,而不是創(chuàng)建新的字符串對象。??

22.集合家族
1.NSArray:是一個 Cocoa 類,用來存儲對象的有序列表。 兩個限制:1.只能存儲 objective-c 的對象,不能存儲 C 語言中得基本數(shù)據(jù)類型。?

2.也不能存儲 nil。 ? ??

?

23.NSNumber 包裝(以對象形式實(shí)現(xiàn))基本數(shù)據(jù)類型 裝箱:將一個基本類型的數(shù)據(jù)包裝成對象。 取消裝箱:從對象中提取基本類型的數(shù)據(jù)。 objective-c 不支持自動裝箱。??

?

?

?

?

?

?

?

24.NSV alue 是 NSNumber 的父類。?

+(NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type;?

傳遞的參數(shù)是你想要包裝的數(shù)值的地址(如一個 NSSize 或你自己的 struct)。通常, 得到的是你想要存儲的變量的地址(在 C 語言中使用操作符&)。你也可以提供一 個用來描述這個數(shù)據(jù)類型的字符串,通常用來說明 struct 中實(shí)體的類型和大小。你 不用自己寫代碼來生成這個字符串,@encode?編譯器指令可以接受數(shù)據(jù)類型的名稱 并為你生成合適的字符串。?

NSRect rect = NSMakeRect(1, 2, 30, 40);
NSValue *value;
value = [NSValue valueWithBytes:&rect objCType:@encode(NSRect)]; [array addObject:value];??

25.NSNull 只有一個方法[NSNull null];
[NSNull null]總是返回一樣的數(shù)值,所以你可以使用運(yùn)算符==將該值與其他值進(jìn)行?

比較??

?

?

?

?

?

?

分享到:??0 聲明:OSCHINA 博客文章版權(quán)屬于作者,受法律保護(hù)。未經(jīng)作者同意不得轉(zhuǎn)載。

轉(zhuǎn)載于:https://www.cnblogs.com/iOS-mt/p/4260748.html

總結(jié)

以上是生活随笔為你收集整理的原 iOS面试题收集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。