iOS部分筆試題及答案

IOS筆試題
面試題網(wǎng)址http://www.mianwww.com/html/category/it-interview/mobile

  1. 屬性readwrite、readonly、assign、retain、copy充尉、nonatomic各是什么作用,在那種情況下用?
    assign用于簡單數(shù)據(jù)類型闯第,如NSInteger,double,bool,retain和copy用于對象,
    readwrite是可讀可寫特性缀拭;需要生成getter方法和setter方法時咳短;
    readonly是只讀特性 只會生成getter方法 不會生成setter方法 ;
    不希望屬性在類外改變assign是賦值特性,setter方法將傳入?yún)?shù)賦值給實例變量蛛淋;僅設置變量時咙好;
    retain表示持有特性,setter方法將傳入?yún)?shù)先保留褐荷,再賦值勾效,傳入?yún)?shù)的retaincount會+1;copy表示賦值特性,setter方法將傳入對象復制一份;需要完全一份新的變量時层宫。nonatomic非原子操作绘迁,決定編譯器生成的setter getter是否是原子操作,
    atomic表示多線程安全卒密,一般使用nonatomic

  2. Object -C 中創(chuàng)建線程的方法時什么缀台?如果在主線程中執(zhí)行代碼,方法時什么哮奇?如果想延遲執(zhí)行代碼膛腐,方法又是什么?Phread鼎俘、NSThread哲身、GCD、NSOperation回到主線程的方法:
    方法一:

     dispatch_async(dispatch_get_main_queue(), ^{           …..        });   
    

方法二:

    [self performSelectorOnMainThread:  withObject:image waitUntilDone:YES];

延遲執(zhí)行的方法: //延遲加載 3秒后執(zhí)行show方法
方法一:performSelector方法

      //[self performSelector:@selector(show) withObject:nil afterDelay:3];  

方法二:定時器

  //[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(show) userInfo:nil repeats:NO];    

方法三:sleep

    //    [NSThread sleepForTimeInterval:3];
    //    [self show];  

方法四:GCD

     dispatch_time    double delayInSeconds = 3.0;    __block ViewController* bself = self;    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW,(int64_t)(delayInSeconds * NSEC_PER_SEC));    dispatch_after(popTime, dispatch_get_main_queue(), ^{        [bself show];    });
  1. #import跟#include有什么區(qū)別贸伐,@class呢勘天?

#import能避免頭文件被重復包含的問題:
  1. C/C++中包含頭文件時用#include。( 使用include要注意重復引用的問題:解決辦法#ifndef/#define/#endif)
  2. #import 確定一個文件只能被導入一次,避免了重復引?的問題,在OC中我們基本用的都是 import捉邢。 #import< > 包含iOS框架類庫?的類, #import""包含項目中自定義的類脯丝。@class通知編譯器,其后面聲明的名稱是類的名稱伏伐,至于這些類是如何定義的宠进,暫時不用考慮
  1. Object C中書寫一個單例模式,使用GDB寫單例藐翎?
    //方法一:

    static SingletonPattern* _singletonPatternByNormal;+(id)sharedSingletonPatternByNormal{    if(!_singletonPatternByNormal)    {        _singletonPatternByNormal=[[SingletonPattern alloc]init];    }    return _singletonPatternByNormal;}
    

//方法二://使用GCD dispatch_once
//適用場景:多線程安全

    static SingletonPattern* _singletonPatternByGCD;
    +(id)sharedSingletonPatternByGCD{    
    static dispatch_once_t onceToken;   
     dispatch_once(&onceToken, ^{       
      _singletonPatternByGCD =[[SingletonPattern alloc]init];    
      });   
       return _singletonPatternByGCD;}
  1. 說明week和__week的作用及常用在什么時候材蹬?
    week 一般是在屬性的聲明中 在@propert后面使用
    __week 一般是在對象的聲明中使用

    @property (weak, nonatomic) IBOutlet UIImageView *ImageView;__weak TRPoint *p1 = nil;//__weak將指針p1定義為弱引用
    

當弱引用指向一個強引用所持有的對象時,當強引用將對象釋放掉后吝镣,弱引用會自動的被賦值為ni

  1. 書寫一個block堤器、并簡單描述block ?

    int (^block2)(int ,int)=^(int nAdd1,int nAdd2){    
     NSLog(@"有參數(shù)有返回值的block被執(zhí)行");    
      return nAdd1+nAdd2;
    };
    
  2. Object C
    中多線程有幾種實現(xiàn)方式末贾,都有什么闸溃?

  3. 簡述Objective-C內(nèi)存管理MRC與ARC的關(guān)系及其區(qū)別?
    MRC 手都內(nèi)存管理未舟;ARC是自動內(nèi)存管理圈暗。
    當我們使用alloc,retain,new,copy或者mutableCopy的時候,引用計數(shù)+1,當我們使用release的使用,引用計數(shù)-1,當引用計數(shù)為0的時候,這個對象才會被徹底銷毀,對象在銷毀之前系統(tǒng)會自動的調(diào)用dealloc方法,在dealloc方法里面,如果這個對象還持有其他對的指針,那么需要先對這些指針進行release,再調(diào)用[super dealloc];

  4. IOS中持久化方式有哪些?
    NSUserDefaults裕膀、plist员串、Archiving:歸檔、SQLite3和Core Data

  5. 通知和代理的區(qū)別昼扛?
    觀察者模式:一個對象(A)想知道另一個對象(B)的狀態(tài)是否發(fā)生了變化寸齐,A對象隨B對象狀態(tài)的改變而改變的過程欲诺,可以用觀察的過程來控制,這種兩個對象保持狀態(tài)改變的一致的模式渺鹦,叫做觀察者模式
    ------共同點 利用通知和代理都能完成對象間的通信扰法。(比如A對象告訴D對象發(fā)生了什么事情,A對象傳遞數(shù)據(jù)給D對象)
    ------不同點 代理:只能是一對一的關(guān)系(一個對象只能告訴另外一個對象發(fā)生了什么事情)通知:多對多關(guān)系(一個對象能告訴N個對象發(fā)生了什么事情毅厚,一個對象能得知N個對象發(fā)生了什么事情)

補充題目塞颁。MRC中Setter方法的實現(xiàn)setter方法的實現(xiàn)

-(void)setCar:(Car *)car {  
   if(_car!=car)   {
    [_car release];//對舊對象release一次  
    _car = [car retain];//對新對象retain一次}
}

1.Objective-C有多重繼承嗎?不是的話有什么代替方法吸耿?
沒有多重繼承( )多繼承在這里是用protocol 委托代理 來實現(xiàn)的

2.簡述#import跟#include的區(qū)別祠锣,@class呢?

#import和#include區(qū)別在與防止重復加載頭文件
#import和@class @class 一般出現(xiàn)在頭文件(.h)中咽安。#import用于.m中伴网。

例如A->B ,B->A.相互依賴時import會報錯

3.簡述線程與進程的區(qū)別和聯(lián)系?
進程和線程都是操作系統(tǒng)中程序運行的基本單元妆棒,系統(tǒng)利用該基本單元實現(xiàn)系統(tǒng)對應用的并發(fā)性澡腾。差別在與不同的操作系統(tǒng)資源管理方式。
進程有獨立的地址空間糕珊,一個進程崩潰后动分,在保護模式下不會對其它進程產(chǎn)生影響,而線程知識一個進程中的不同執(zhí)行路徑放接。
線程有自己的堆棧和局部變量刺啦,但線程之間沒有獨立的地址空間,一個線程死掉就等于整個線程死掉纠脾,所以多進程的程序要比多線程的程序健壯,但在進程切換時蜕青,耗費資源較大苟蹈,效率要差一些。但對于一些要求同時進行并且又要共享某些變量的并發(fā)操作右核,只能用線程慧脱,不能用進程。

4.簡述readwrite贺喝,readonly菱鸥,assign,retain躏鱼,copy氮采,nonatomic屬性的作用?
readwrite 是可讀可寫特性染苛;
需要生成getter方法和setter方法時readonly 只讀屬性鹊漠,只有g(shù)etterassign 是賦值特性,setter方法將傳入?yún)?shù)賦值給實例變量;
僅設置變量時躯概;retain 表示持有特性登钥,setter方法將傳入?yún)?shù)先保留,再賦值娶靡,傳入?yún)?shù)的retaincount會+1;
copy 表示拷貝特性牧牢,setter方法將傳入對象復制一份;
需要完全一份新的變量時姿锭。nonatomic 非原子操作塔鳍,決定編譯器生成的setter getter是否是原子操作,atomic表示多線程安全艾凯,一般使用nonatomic

5.你在開發(fā)項目時献幔,用到了哪些數(shù)據(jù)存儲方式,iPhone中常見的方式有哪些趾诗,各有什么區(qū)別蜡感?
NSUserDefault (偏好設置) plist (屬性列表) Archiving (歸檔) SQList Core Data

  1. 定義屬性時,什么情況使用copy恃泪,assign和retain郑兴?
    當我們需要獲得一份全新的數(shù)據(jù)時采用copy;assign 設置變量參數(shù)時使用贝乎;retain

7.autorelease的對象是在什么時候被release的情连?
只是引用計數(shù)減一的時機不同而已,autorelease會在對象的使用真正結(jié)束的時候才做引用計數(shù)減一

8.對于C++/OC來說,類(class)與結(jié)構(gòu)(struct)有什么區(qū)別览效?
class是引用類型却舀,struct是值類型。引用類型a2值改變a1 也改變值類型a1付給a2開辟一塊新的空間锤灿,a2改變a1不會隨著改變挽拔。

9.內(nèi)存的分配方式有哪幾種?請簡述但校。
1從靜態(tài)存儲區(qū)域分配螃诅。內(nèi)存在程序編譯的時候就已經(jīng)分配好,這塊內(nèi)存在程序的整個運行期間都存在状囱。例如全局變量术裸,static變量。
2亭枷、在棧上創(chuàng)建袭艺。3、從堆上分配

10.冒泡排序
排序int num[ ] = {2,3,6,4,8,7}

int = i, j;
for(i = 0; i < num.count; i++ ) {   
  for (j = 0; j < num.count - i -1; j++ ) {         
 if( num[j]>num[j+1]) {           
int temp = num[j];              
   num[j] = num[ j+1 ];              
   num[j+1] = temp;        
  }   
  }}

11.什么是代理(delegate),什么是協(xié)議(protocol)?兩者有什么關(guān)系嗎奶栖?
delegate它本身是一個設計模式匹表,它的意思是委托別人去做某事门坷。protocol協(xié)議就是要做的事。

12.根據(jù)你的理解袍镀,手工寫出下面屬性定義的setter方法默蚌。

    @property(nonatomic,retain)NSString*name;-(void)setName:(NSString *)str {      [str retain];     [name release];4     name = str;}

13.簡述retain和copy的區(qū)別對象指向的還是原來的地址 引用計數(shù)器+1copy 將對象拷貝一份,完全新的簡述ios的內(nèi)存管理機制苇羡?自動內(nèi)存計數(shù) 系統(tǒng)手動內(nèi)存計數(shù) 程序員自己回收 誰創(chuàng)建誰銷毀 簡述你對 retain,copy,assign,strong,weak屬性的理解绸吸?
retain:用于指針變量。就是說你定義了一個變量
assign: 用于非指針變量设江。用于基礎(chǔ)數(shù)據(jù)類型
copy :它指出锦茁,在賦值時使用傳入值的一份拷貝
strong:強引用,引用計數(shù)器加一叉存,對象釋放時減一
weak: 弱引用码俩,不會加一減一

dealloc,release,autorelease的區(qū)別是什么?簡述他們是如何工作的歼捏?
release是引用計數(shù)器減一dealloc是引用計數(shù)器為0時調(diào)用銷毀對象Autorelease實際上只是把對release的調(diào)用延遲了稿存,對于每一個Autorelease,系統(tǒng)只是把該Object放入了當前的Autorelease pool中瞳秽,當該pool被釋放時瓣履,該pool中的所有Object會被調(diào)用Release。 autorelease pool來避免頻繁申請/釋放內(nèi)存(就是pool的作用了)练俐。

簡述一下delegate 袖迎,KVO,NSNotification的作用和區(qū)別腺晾? 解釋一下什么是Lazy Loading燕锥?
懶加載,當要使用這個對象時調(diào)用悯蝉,不使用就不會調(diào)用脯宿。節(jié)省內(nèi)存。當加載大文件時就不建議使用泉粉,以空間換時間。

為什么說Objective-C是動態(tài)運行時語言榴芳? 簡述IOS實現(xiàn)多線程有幾種方式嗡靡?多線程之間如何通訊?
GCD ,NSOperation,NSThread,PThread分為同步異步

你經(jīng)常使用類NSObject的哪些方法窟感?RunLoop是什么讨彼,在iOS中起到什麼作用? 為什么很多內(nèi)置類如UITableViewControl的delegate屬性都是assign而不retain柿祈?防止重復加載請問下面這段代碼有什么問題哈误?

(void)setAge:(int)newAge { Self.age=newAge; }

進入循環(huán) self.age 會自動觸發(fā)setter方法_age = newAge;

請使用OC編寫Singleton設計模式的實現(xiàn)哩至。

@interface Singleton : NSObject
    + (id)shardSingleton; 
@end 
static Singleton *_singleton = nil;
+ (id)shardSingleton {   
    if(!_singleton) {      
    _singleton = [[Singleton alloc] init];    
 }  
      return _singleton;
}
面試題.png

1.可變 數(shù)組用 copy會怎么樣?
copy是深拷貝蜜自,又稱為值拷貝菩貌,用copy修飾的可變數(shù)組 array會變成不可變
字符串 用strong會怎么樣?
strong是淺拷貝重荠,又稱為指針拷貝箭阶,修飾的全局NSString類型,但在局部創(chuàng)建NSMutableString時
例如NSMutableString * str = 【NSMutableString stringWhitFomt:“456”】戈鲁;
讓string = str; 當NSMutableString的str改變時仇参, strong修飾的NSString也跟著改變
用的同一個內(nèi)存

2.oc-js 直接用原生的
js -> oc
先搭建一個橋梁stringByEvaluatingJavaScripFromString
shouldStarloadwiht什么來著我忘了
js調(diào)用oc方法,可以通過data 給oc傳值

3.用charler抓包 用postMan模擬請求婆殿,
用wkwebview替代uiwebview诈乒,u或者在webviewDidFinishload中
加上[NSUserDefaules standerdUserDefaules]setInteger:0 forkey:“WebkitCacheModlePe..."]
請求方法URI協(xié)議/版本
請求頭(Request Header)
請求正文

4.block 傳值很方便,block適合兩個控制器直接的關(guān)系婆芦,代理適合多個控制器傳值傳方法怕磨,遵從協(xié)議實現(xiàn)協(xié)議方法

5.通知和kvo的區(qū)別
通知需要 被觀察者 先主動發(fā)送通知,然后觀察者注冊監(jiān)聽后才會做出響應寞缝。不過不僅可以監(jiān)聽屬性的變化癌压,還有方法,
kvo 在觀察者里實現(xiàn)荆陆,是誰監(jiān)聽誰注冊滩届,被觀察者只需要allobserver 來添加觀察。然后不需要寫任何代碼被啼, 觀察者自己來實現(xiàn) 代理方法即可帜消,

6.performSelector 延遲方法,只能在主線程中使用浓体,
因為在主線程中 當事件開始的時候 runloop回創(chuàng)建一個timer 泡挺,而子線程不會創(chuàng)建 所以無法執(zhí)行performSelector 的延遲方法,就是不能再異步中執(zhí)行命浴。
dispach_time可以 在異步中執(zhí)行 娄猫,使用dispach——after..

7.數(shù)據(jù)緩存方面的經(jīng)驗?
歸檔 NSUserDefaules sqlits FMDB NSURLCache

8.block循環(huán)引用生闲,在block中用set方法調(diào)用全局變量 比如 self.name 會讓name的引用計數(shù)計數(shù)+1媳溺,只要__weak把self重新引用一下就行了

9.類別,類別的作用 1: 將類的實現(xiàn)分散不同的類或者框架中
2: 將類的私有方法的優(yōu)先級提高
3.創(chuàng)建協(xié)議
類別通常用來添加方法碍讯,添加屬性的話 需要用到 runtime 在類別中重寫set和get方法
【只能擴展類的方法悬蔽,不能擴展類的屬性】
10。例如 邊里第三方SDK的私有API啦 用class_Ivar動態(tài)添加成員變量啦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捉兴,一起剝皮案震驚了整個濱河市蝎困,隨后出現(xiàn)的幾起案子录语,更是在濱河造成了極大的恐慌,老刑警劉巖禾乘,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澎埠,死亡現(xiàn)場離奇詭異,居然都是意外死亡盖袭,警方通過查閱死者的電腦和手機失暂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳄虱,“玉大人弟塞,你說我怎么就攤上這事∽疽眩” “怎么了决记?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長倍踪。 經(jīng)常有香客問我系宫,道長,這世上最難降的妖魔是什么建车? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任扩借,我火速辦了婚禮,結(jié)果婚禮上缤至,老公的妹妹穿的比我還像新娘潮罪。我一直安慰自己,他們只是感情好领斥,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布嫉到。 她就那樣靜靜地躺著,像睡著了一般月洛。 火紅的嫁衣襯著肌膚如雪何恶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天嚼黔,我揣著相機與錄音细层,去河邊找鬼。 笑死唬涧,一個胖子當著我的面吹牛今艺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播爵卒,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撵彻!你這毒婦竟也來了钓株?” 一聲冷哼從身側(cè)響起实牡,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎轴合,沒想到半個月后创坞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡受葛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年题涨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片总滩。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡纲堵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闰渔,到底是詐尸還是另有隱情席函,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布冈涧,位于F島的核電站茂附,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏督弓。R本人自食惡果不足惜营曼,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望愚隧。 院中可真熱鬧蒂阱,春花似錦、人聲如沸奸攻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽睹耐。三九已至辐赞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間硝训,已是汗流浹背响委。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留窖梁,地道東北人赘风。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像纵刘,于是被迫代替她去往敵國和親邀窃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容