iOS常見面試題

前言

時間飛逝啊,轉眼間Kobe Bean Bryant已經退役1054天,小德懷恩·泰隆·韋德這個賽季這之後也將退役,黃金一代是多少80 90 的回憶。啊。。。。。好吧,進入正題吧,此時此刻已經處於金三銀四換工作的黃金時段,作爲程序猿的大家都在蠢蠢欲動,換工作等於漲工資。。。。。希望大家抓住機遇,找到屬於自己心儀的那份工作。
接下來我整理了前一個星期所遇到的一些面試題給大家,可能不全,希望大家多提建議。

面試題

1、什麼情況下使用weak關鍵字,相比assign有什麼不同?
什麼情況下使用weak關鍵字?

  • 在ARC中,在有可能出現循環引用的時候,往往要通過讓其中一端使用weak關鍵字來解決,如delegate代理屬性
  • 自身已經對它進行一次強引用,沒有必要再強引用一次,此時也會使用weak,自定義IBOutlet控件屬性一般也是有weak,當然使用strong也可以。

不同點:
1.weak此特性表明該屬性定義了一種“非擁有關係”爲這種屬性設置新值時,設置方法不保留新值,也不是釋放舊值。這個特性跟assign類似,但在屬性所指向的對象被摧毀時,屬性值也會清空,而assign的設置方法只會針對“純量類型”(如CGFloat,NSInteger等)簡單賦值操作。
2.assign可以用於非OC對象,而weak必須用於OC對象。

2、怎麼用copy關鍵字?
用途:

  • NSString、NSArray、NSDictionary等經常使用copy關鍵字,因爲他們有對應的可變類型:NSMutableString、NSMutableArray、NSMutableDictionary;
  • block也使用copy關鍵字,這是從MRC遺留下來的“傳統”,方法內部的block實在棧區的,使用copy可以將它放在堆區,在ARC中寫不寫都行,對於block使用copy和strong是一樣的,編譯器自動對block進行copy操作。

3、這個寫法會出什麼問題?:@property (copy) NSMutableArray *array;
兩個問題:
1、添加,刪除,修改數組內元素的時候,程序會因爲找不到對應的方法導致奔潰,因爲copy就是複製一個不可變NSArray的對象。
2、使用了atomic屬性會嚴重的影響性能
解決:第一條的話在上文有論述,第二條原因如下:

該屬性使用了同步鎖,會在創建時生成一些額外的代碼用於幫助編寫多線程程序,這會帶來性能問題,通過聲明nonatomic可以節省這些雖然很小但是不必要的額外開銷。

未完待續~~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章