之前看了很多面試題,感覺要不是不夠就是過于冗余,因而我將網(wǎng)上的1些面試題進(jìn)行了刪減和重排,現(xiàn)在分享給大家。(題目來源于網(wǎng)絡(luò),侵刪)
1. Object-c的類可以多重繼承么?可以實(shí)現(xiàn)多個(gè)接口么?Category是甚么?重寫1個(gè)類的方式用繼承好還是分類好?為何?
答: Object-c的類不可以多重繼承;可以實(shí)現(xiàn)多個(gè)接口,通過實(shí)現(xiàn)多個(gè)接口可以完成C++的多重繼承;Category是種別,1般情況用分類好,用Category去重寫類的方法,僅對本Category有效,不會(huì)影響到其他類與原有類的關(guān)系。
2. #import 跟#include 又甚么區(qū)分,@class呢, #import<> 跟 #import””又甚么區(qū)分?
答:#import是Objective-C導(dǎo)入頭文件的關(guān)鍵字,#include是C/C++導(dǎo)入頭文件的關(guān)鍵字,使用#import頭文件會(huì)自動(dòng)只導(dǎo)入1次,不會(huì)重復(fù)導(dǎo)入,相當(dāng)于#include和#pragma once;@class告知編譯器某個(gè)類的聲明,當(dāng)履行時(shí),才去查看類的實(shí)現(xiàn)文件,可以解決頭文件的相互包括;#import<>用來包括系統(tǒng)的頭文件,#import””用來包括用戶頭文件。
3. 屬性readwrite,readonly,assign,retain,copy,nonatomic 各是甚么作用,在那種情況下用?
答:
1). readwrite 是可讀可寫特性;需要生成getter方法和setter方法時(shí)
2). readonly 是只讀特性 只會(huì)生成getter方法 不會(huì)生成setter方法 ;不希望屬性在類外改變
3). assign 是賦值特性,setter方法將傳入?yún)?shù)賦值給實(shí)例變量;僅設(shè)置變量時(shí);
4). retain 表示持有特性,setter方法將傳入?yún)?shù)先保存,再賦值,傳入?yún)?shù)的retaincount會(huì)+1;
5). copy 表示賦值特性,setter方法將傳入對象復(fù)制1份;需要完全1份新的變量時(shí)。
6).nonatomic 非原子操作,決定編譯器生成的setter getter是不是是原子操作,atomic表示多線程安全,1般使用nonatomic
4.寫1個(gè)setter方法用于完成@property (nonatomic,retain)NSString *name,寫1個(gè)setter方法用于完成@property(nonatomic,copy)NSString *name
答:
- (void) setName:(NSString*) str { [str retain]; [name release]; name = str; } - (void)setName:(NSString *)str { id t = [str copy]; [name release]; name = t; }
5.對語句NSString*obj = [[NSData alloc] init]; obj在編譯時(shí)和運(yùn)行時(shí)分別時(shí)甚么類型的對象?
答: 編譯時(shí)是NSString的類型;運(yùn)行時(shí)是NSData類型的對象
6.常見的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,只是1定字節(jié)的內(nèi)存空間,用于寄存數(shù)值;NSInteger是基本數(shù)據(jù)類型,其實(shí)不是NSNumber的子類,固然也不是NSObject的子類。NSInteger是基本數(shù)據(jù)類型Int或Long的別名(NSInteger的定義typedef long NSInteger),它的區(qū)分在于,NSInteger會(huì)根據(jù)系統(tǒng)是32位還是64位來決定是本身是int還是Long。
7.id 聲明的對象有甚么特性?
答:Id 聲明的對象具有運(yùn)行時(shí)的特性,便可以指向任意類型的objcetive-c的對象;
8.Objective-C如何對內(nèi)存管理的,說說你的看法和解決方法?
答:Objective-C的內(nèi)存管理主要有3種方式ARC(自動(dòng)內(nèi)存計(jì)數(shù))、手動(dòng)內(nèi)存計(jì)數(shù)、內(nèi)存池。
1). (Garbage Collection)自動(dòng)內(nèi)存計(jì)數(shù):這類方式和java類似,在你的程序的履行進(jìn)程中。始終有1個(gè)高人在背后準(zhǔn)確地幫你整理垃圾,你不用斟酌它甚么時(shí)候開始工作,怎樣工作。你只需要明白,我申請了1段內(nèi)存空間,當(dāng)我不再使用從而這段內(nèi)存成為垃圾的時(shí)候,我就完全的把它忘記掉,反正那個(gè)高人會(huì)幫我整理垃圾。遺憾的是,那個(gè)高人需要消耗1定的資源,在攜帶裝備里面,資源是緊俏商品所以iPhone不支持這個(gè)功能。所以“Garbage Collection”不是本入門指南的范圍,對“Garbage Collection”內(nèi)部機(jī)制感興趣的同學(xué)可以參考1些其他的資料,不過說老實(shí)話“Garbage Collection”不大合適適初學(xué)者研究。