iOS面試題(1)

iOS面試題整理帶答案:

1.簡述OC中內存管理機制磨隘。與retain配對使用的方法是dealloc還是release,為什么?需要與alloc配對使用的方法是dealloc還是release,為什么?re,readonly,assign,retain,copy,nonatomic瘤袖、atomic、strong、weak屬性的作用?管理機制:使用了一種叫做引用計數(shù)的機制來管理內存中的對象给梅。OC中每個對象都對應著他們自己的引用計數(shù),引用計數(shù)可以理解為一個整數(shù)計數(shù)

用alloc方法創(chuàng)建對象的時候,持有計數(shù)會自動設置為1顽冶。當你向一個對象發(fā)送retain消息 時,持有計數(shù)數(shù)值會增加1。相反,當你像一個對象發(fā)送rele時,持有計數(shù)數(shù)值會減小1审胚。當對象的持有計數(shù)變?yōu)?的時候,對象會釋放自己所占用的內存。

retain(引用計數(shù)加1)->release(引用計數(shù)減1)alloc(申請內存空間)->dealloc(釋放內存空間)

readwrite:表示既有getter,也有setter (默認)

readonly:表示只有getter,沒有setter

nonatomic:不考慮線程安全atomic:線程操作安全 (默認)線程安全情況下的setter和getter:

- (NSString*) value {@synchronized(self) {

return [[_value retain] autorelease];

}}

(void) setValue:(NSString*)aValue {

@synchronized(self) {

[aValue retain];

[_value release];

_value = aValue;

}}

retain: release舊的對象,將舊對象的值賦予輸入對象,再提高輸入對象的索引計數(shù)為1

assign:簡單賦值,不更改索引計數(shù) (默認)

copy:其實是建立了一個相同的對象,地址不同(retain:指針拷貝copy:內容拷貝)

strong:(ARC下的)和(MRC)retain一樣 (默認)

weak:(ARC下的)和(MRC)assign一樣,weak當指向的內存釋放掉后自動nil化,防止野指針

unsafe_unretained聲明一個弱應用,但是不會自動nil化,也就是說,如果所指向的內存區(qū)域被釋放了,這個指針就是一個野指針了礼旅。autoreleasing飾一個函數(shù)的參數(shù),這個參數(shù)會在函數(shù)返回的時候被自動釋放膳叨。

2.類變量的@protected ,@private,@public,@package,聲明各有什么含義?

來源于

a

a

@private:作用范圍只能在自身類@protected:作用范圍在自身類和繼承自己的子類 (默認)

@public:作用范圍最大,可以在任何地方被訪問。@package:這個類型最常用于框架類的實例變量,同一包內能用,跨包就不能訪問

3.線程是什么?進程是什么?二者有什么區(qū)別和聯(lián)系?一個程序至少有一個進程,一個進程至少有一個線程:

進程:一個程序的一次運行,在執(zhí)行過程中擁有獨立的內存單元,而多個線程共享一塊內存

線程:線程是指進程內的一個執(zhí)行單元痘系。

聯(lián)系:線程是進程的基本組成單位

區(qū)別:(1)調度:線程作為調度和分配的基本單位,進程作為擁有資源的基本單位

(2)并發(fā)性:不僅進程之間可以并發(fā)執(zhí)行,同一個進程的

程之間也可并發(fā)執(zhí)行(3)擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統(tǒng)資源,但可以訪問隸屬于進程的資源.(4)系統(tǒng)開

創(chuàng)建或撤消進程時,由于系統(tǒng)都要為之分配和回收資源,導致系統(tǒng)的開銷明顯大于創(chuàng)建或撤消線程時的開銷菲嘴。

舉例說明:操作系統(tǒng)有多個軟件在運行(QQ、office汰翠、音樂等),這些都是一個個進程,而每個進程里又有好多線程(比如QQ,你可以同時聊天,

等)

4.談談你對多線程開發(fā)的理解?ios中有幾種實現(xiàn)多線程的方法?

好處:

1.使用線程可以把占據(jù)時間長的程序中的任務放到后臺去處理2.用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發(fā)某些事件的處理,可以彈出一個進度條來顯示處理的進度3.程序的運行速度可能加快

4·在一些等待的任務實現(xiàn)上如用戶輸入龄坪、文件讀寫和網(wǎng)絡收發(fā)數(shù)據(jù)等,線程就比較有用了。缺點:

1.如果有大量的線程,會影響性能,因為操作系統(tǒng)需要在它們之間切換复唤。2.更多的線程需要更多的內存空間健田。

3.線程的中止需要考慮其對程序運行的影響。4.通常塊模型數(shù)據(jù)是在多個線程間共享的,需要防止線程死鎖情況的發(fā)生佛纫。實現(xiàn)多線程的方法:

NSObject類方法

NSThread

NSOperation

GCD

5.線程同步和異步的區(qū)別?IOS中如何實現(xiàn)多線程的同步?異步:舉個簡單的例子 就是游戲,游戲會有圖像和背景音樂

同步:是指一個線程要等待上一個線程執(zhí)行完之后才開始執(zhí)行當前的線程,上廁所NSOperationQueue:maxcurrentcount

NSConditionLock

GCD->http://blog.csdn.net/onlyou930/article/details/8225906

6.假設有一個字符串a(chǎn)abcad,請寫一段程序,去掉字符串中不相鄰的重復字符串,即上述字符串處理之后的輸出結果為:aabcdNSMutableString * str = [[NSMutableString alloc]initWithFormat;@“aabcad”];

for (int i = 0 ,i < str.length - 1 ;i++){

unsigned char a = [str characterAtIndex:i];

for (int j = i + 1 ,j < str.length ,j++){

unsigned char b = [str characterAtIndex:j];

if (a == b ){

if (j == i + 1){

}else{

[str deleteCharactersInRange:NSMakeRange(j, 1)];

}

}

}

}

NSLog(@“%@”,str);

7.獲取一臺設備唯一標識的方法有哪些?http://www.cnblogs.com/max5945/archive/2013/06/24/3152292.html
(1)UDID

(2)UUID

(3)MAC Address

(4)OPEN UDID

(5)廣告標識符

發(fā)

(6)Vindor標示符*ios7以后使用keychain

8.iOS類是否可以多繼承?如果沒有,那可以用其他方法實現(xiàn)嗎?簡述實現(xiàn)過程妓局。不可以多繼承 用protocol實現(xiàn)

9.堆和棧的區(qū)別?堆需要用戶手動釋放內存,而棧則是編譯器自動釋放內存

問題擴展:要知道OC中NSString的內存存儲方式

10.iOS本地數(shù)據(jù)存儲都有哪幾種方式?NSKeyedArchiver

NSUserDefaults

Write寫入方式

SQLite3

http://blog.csdn.net/tianyitianyi1/article/details/7713103

(問題擴展:什么情況下使用什么樣的數(shù)據(jù)存儲)

1.NSKeyedArchiver:采用歸檔的形式來保存數(shù)據(jù),數(shù)據(jù)對象需要遵守NSCoding協(xié)議,對象對應的類必須提供encodeWithCoder:和initWithCoder:點:只能一次性歸檔保存以及一次性解壓总放。所以只能針對小量數(shù)據(jù),對數(shù)據(jù)操作比較笨拙,如果想改動數(shù)據(jù)的某一小部分,需要解壓或歸檔整個數(shù)2.NSUserDefaults:用來保存應用程序設置和屬性、用戶保存的數(shù)據(jù)好爬。用戶再次打開程序或開機后這些數(shù)據(jù)仍然存在局雄。NSUserDefaults可以存儲的

包括:NSData、NSString抵拘、NSNumber哎榴、NSDate、NSArray僵蛛、NSDictionary尚蝌。缺點:如果要存儲其他類型,需要轉換為前面的類型,才能用NSUse

s存儲。3.Write寫入方式:永久保存在磁盤中充尉。第一步:獲得文件即將保存的路徑:第二步:生成在該路徑下的文件:第三步:往文件中寫入數(shù)據(jù):最后:讀出數(shù)據(jù):

4. SQLite:采用SQLite數(shù)據(jù)庫來存儲數(shù)據(jù)飘言。SQLite作為一中小型數(shù)據(jù)庫,應用ios中,跟前三種保存方式相比,相對比較復雜一些。

11.寫出方法獲取iOS內存使用情況驼侠。http://blog.sina.com.cn/s/blog_698415f20100yjlo.html
//獲取當前設備可用內存及所占內存的頭文件

#import

#import

//獲取當前設備可用內存(單位:MB)- (double)availableMemory

{

vm_statistics_data_t vmStats;

mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT;kern_return_t kernReturn = host_statistics(mach_host_self(),

HOST_VM_INFO,

(host_info_t)&vmStats,

&infoCount);

if (kernReturn != KERN_SUCCESS) {

return NSNotFound;

}

return ((vm_page_size *vmStats.free_count) / 1024.0) / 1024.0;

}

//獲取當前任務所占用的內存(單位:MB)- (double)usedMemory

{

task_basic_info_data_t taskInfo;

mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT;kern_return_t kernReturn = task_info(mach_task_self(),

TASK_BASIC_INFO,

(task_info_t)&taskInfo,

&infoCount);

if (kernReturn != KERN_SUCCESS

){

return NSNotFound;

}

據(jù)

數(shù)r

return taskInfo.resident_size / 1024.0 / 1024.0;

}

(問題擴展:如何利用Xcode觀察內存使用情況)

12.深拷貝和淺拷貝的理解?http://blog.sina.com.cn/s/blog_7b9d64af01019jq8.html

http://blog.sina.com.cn/s/blog_7b9d64af01019k6n.html
對實例進行深拷貝時當前類需要實現(xiàn)NSCopying協(xié)議姿鸿。

淺拷貝是復制出來一個跟原對象相同地址的對象

深拷貝時復制一個跟源對象不同地址的對象 改變源對象對新對象沒有影響

13.怎樣實現(xiàn)一個singleton的類。http://blog.csdn.net/zhugq_1988/article/details/8568033
問題擴展:單例的好處是什么?

節(jié)省內存

14.什么是安全釋放?置nil再釋放

15.RunLoop是什么?http://blog.csdn.net/jjunjoe/article/details/8313016

16.什么是序列化和反序列化,可以用來做什么?如何在OC中實現(xiàn)復雜對象的存儲?http://blog.csdn.net/zjl201309/article/details/12707979
序列化是把對象轉化成字節(jié)序列的過程 反序列化是把字節(jié)序列恢復成對象

將對象寫到文件或者數(shù)據(jù)庫里,并且能讀取出來

遵循NSCoding協(xié)議 實現(xiàn)復雜對象的存儲 實現(xiàn)該協(xié)議后可以對其進行打包或解包,轉化成NSData

17.寫一個標準宏MIN,這個宏輸入兩個參數(shù)并返回較小的一個?#define MIN(X,Y) ((X)>(Y)?(Y):(X))擴展:在定義宏的時候需要注意哪些問題?

宏全部大寫 寫在#import下@interface上 結尾無分號

18.iphone os有沒有垃圾回收機制?簡單闡述一下OC內存管理倒源。

iphone os沒有垃圾回收機制oc的內存管理是誰創(chuàng)建誰釋放 程序中遇到retain該對象引用計數(shù)+1遇release該對象引用計數(shù)-1 retainCount為0時 內

19.簡述應用程序按Home鍵進入后臺時的生命周期,以及從后臺回到前臺時的生命周期?http://blog.csdn.net/totogo2010/article/details/8048652
自己可以寫個demo來測試一下

進入后臺時

-(void)applicationWillResignActive:(UIApplication *)application;

-(void)applicationDidEnterBackground:(UIApplication *)application;進入前臺時

-(void)applicationDidEnterForeground:(UIApplication *)application;

-(void)applicationWillResignActive:(UIApplication *)application;

20.ViewController的alloc,loadView, viewDidLoad,viewWillAppear,viewDidUnload,dealloc苛预、init分別是在什么時候調用的?在自定義ViewControll這幾個函數(shù)里面應該做什么工作?

http://www.xuebuyuan.com/672935.html

自己寫代碼測試加深理解

alloc申請內存時調用

loadView加載視圖時調用ViewDidLoad視圖已經(jīng)加載后調用ViewWillAppear視圖將要出現(xiàn)時調用ViewDidUnload視圖已經(jīng)加載但沒有加載出來調用dealloc銷毀該視圖時調用

e

init視圖初始化時調用

21.描述應用程序的啟動順序。

1.程序入口main函數(shù)創(chuàng)建UIApplication實例和UIApplication代理實例笋熬。2.在UIApplication代理實例中重寫啟動方法,設置第一ViewController热某。3.在第一ViewController中添加控件,實現(xiàn)應用程序界面。

22.為什么很多內置類如UITableViewControl的delegate屬性都是assign而不是retain?請舉例說明胳螟。防止循環(huán)引用

23.使用UITableView時候必須要實現(xiàn)的幾種方法?-(NSInteger)tableView:(UITableView*)tableViewNumberOfRowsInSection:(NSInteger)section;這個方法返回每個分段的行數(shù),不同分段返回不同的行

用switch來做,如果是單個列表就直接返回單個你想要的函數(shù)即可昔馋。-(UITableViewCell*)tableView:(UITableView*)tableViewCellForRowAtIndexPath:(

Path)indexPath;這個方法是返回我們調用的每一個單元格。通過我們索引的路徑的section和row來確定

24.寫一個便利構造器糖耸。

//id代表任意類型指針,這里代表Student *,類方法+(id)studentWithName:(NSString *)newName andAge:(int)newAge{release];//自動釋放}

Student *stu=[[Student alloc]initName:newName andAge:newAge];

return

25.UIImage初始化一張圖片有幾種方法?簡述各自的優(yōu)缺點秘遏。

http://blog.sina.com.cn/s/blog_a843a8850101flo3.html

3種imageNamed:系統(tǒng)會先檢查系統(tǒng)緩存中是否有該名字的Image,如果有的話,則直接返回,如果沒有,則先加載圖像到緩存,然后再返回。initWithContentsOfFile:系統(tǒng)不會檢查系統(tǒng)緩存,而直接從文件系統(tǒng)中加載并返回嘉竟。

imageWithCGImage:scale:orientation當scale=1

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末邦危,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子周拐,更是在濱河造成了極大的恐慌铡俐,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妥粟,死亡現(xiàn)場離奇詭異,居然都是意外死亡吏够,警方通過查閱死者的電腦和手機勾给,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門滩报,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人播急,你說我怎么就攤上這事脓钾。” “怎么了桩警?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵可训,是天一觀的道長。 經(jīng)常有香客問我捶枢,道長握截,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任烂叔,我火速辦了婚禮谨胞,結果婚禮上,老公的妹妹穿的比我還像新娘蒜鸡。我一直安慰自己胯努,他們只是感情好,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布逢防。 她就那樣靜靜地躺著叶沛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忘朝。 梳的紋絲不亂的頭發(fā)上灰署,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音辜伟,去河邊找鬼氓侧。 笑死,一個胖子當著我的面吹牛导狡,可吹牛的內容都是我干的约巷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼旱捧,長吁一口氣:“原來是場噩夢啊……” “哼独郎!你這毒婦竟也來了?” 一聲冷哼從身側響起枚赡,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤氓癌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贫橙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贪婉,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年卢肃,在試婚紗的時候發(fā)現(xiàn)自己被綠了疲迂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片才顿。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖尤蒿,靈堂內的尸體忽然破棺而出郑气,到底是詐尸還是另有隱情,我是刑警寧澤腰池,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布尾组,位于F島的核電站,受9級特大地震影響示弓,放射性物質發(fā)生泄漏讳侨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一避乏、第九天 我趴在偏房一處隱蔽的房頂上張望爷耀。 院中可真熱鬧,春花似錦拍皮、人聲如沸歹叮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咆耿。三九已至,卻和暖如春爹橱,著一層夾襖步出監(jiān)牢的瞬間萨螺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工愧驱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慰技,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓组砚,卻偏偏與公主長得像吻商,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子糟红,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內容

  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 1,968評論 0 7
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,346評論 0 35
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,131評論 30 470
  • 轉:http://www.cocoachina.com/programmer/20151019/13746.htm...
    Style_偉閱讀 1,301評論 0 3
  • 每天感覺自己很忙盆偿,忙到連篇百字的日記都沒有時間寫的話真是要做檢討了柒爸。 昨天中午出門去上黃裕棠老師的課,整個下午三個...
    吳槿瑄閱讀 264評論 1 1