天天看點

iOS基礎面試題一

一、簡答題

1、下面這些方法的方法名是什麼?

1

2

3

4

<code>-(</code><code>void</code><code>)person</code>

<code>-(</code><code>void</code><code>)personwithage;</code>

<code>-(</code><code>void</code><code>)personwithage:(</code><code>int</code><code>)age;</code>

<code>-(</code><code>void</code><code>)personwithage:(</code><code>int</code><code>)age name:(</code><code>nsstring</code> <code>*)name;</code>

答:person /   personwithage  / personwithage:   /   personwithage: name:

2、nsarray和nsset有什麼使用差別?

     (1)nsarray是有序的,而nsset是無序的。

     (2)nsarray資料可以相同,但是nsset資料是不相同的。

     (3)在搜尋一個一個元素時nsset的效率比nsarray高,因為nsset用到了一個算法hash。比如你要存儲和通路一個資料元素a,一個hash算法直接就能找到a的應該存儲的位置和存儲位置。而nsarray則需要周遊整個數組。

3、定義一個無參傳回值的block變量,并且調用這個block?

//沒有傳回值,沒有參數的block

5

6

7

<code>-(</code><code>void</code><code>)blockwithoutparameterandreturndata</code>

<code>{</code>

<code>    </code><code>void</code><code>(^myblock)(</code><code>void</code><code>)  = ^ {</code>

<code>        </code><code>nslog</code><code>(@</code><code>"this is a block without parameter and returned value"</code><code>);</code>

<code>    </code><code>};</code>

<code>    </code><code>myblock();</code>

<code>}</code>

4、定義一個有參有傳回值的block變量,并且調用這個block?

8

<code>      </code><code>-(</code><code>void</code><code>)addparameterandrestunvaluesforblock</code>

<code>    </code><code>int</code><code>(^blocknames)(</code><code>int</code><code>) = ^(</code><code>int</code> <code>num) {</code>

<code>        </code><code>return</code> <code>num * 30;</code>

<code>    </code><code>int</code> <code>result = blocknames(2);</code>

<code>    </code><code>nslog</code><code>(@</code><code>"%d"</code><code>,result);</code>

<code>} </code>

5、你知道swift是什麼麼?談談對它目前的了解?

          swift是蘋果新出的一個開發語言,它是基于c語言開發的,比objective-c更加靈活友善。在不久的将來swift會取代objective-c作為ios開發的主要語言。

6、強引用和弱引用的差別?

          強引用是持有對象,弱引用是不持有對象;

          強引用可以釋放對象,但是弱引用不可以,當一個對象為強引用時,在其作用域之外的話,該對象所持有的對象被釋放;當一個對象為弱引用時,,它不持有對象,在對象釋放後,它自動被指派為nil。

7、strong、weak、assign各自使用的場合是什麼?

       assign用于簡單資料類型,如nsinteger,double,bool.

     在arc環境下,strong代替retain,weak代替assign;

     在循環使用的時候,一端用strong,另一端則需要使用weak,防止循環調用。

     oc對象類型一般都是用strong.

8、分類(category)有什麼作用

将類的實作分散到多個不同檔案或者多個不同架構中。

建立對私有方法的向前引用。

向對象添加非正式協定。  

     簡單來說就是:category可以對類進行擴充,可以給所有類添加自己的方法。

  9、談談你對self和super的了解?

          在我的世界觀裡,self就是一個類的隐藏的參數,指向目前調用方法的類;

          而super指的是父類。使用super就會告訴編譯器,要去調用父類的方法。super隻是一個編譯訓示符。

10、編譯器遇到下面的代碼會自動生成哪些代碼?

<code>self</code><code>.age = 20;           自動生成[set stage:20];</code>

<code>  </code><code>int</code> <code>age = </code><code>self</code><code>.age;      </code><code>//有待完善</code>

<code>  </code><code>nsarray</code> <code>*names = @[@“mj”,@”jj”,@“jay”];    </code><code>//   nsarray *names = [[nsarray alloc] initwithobjects:@"mj",@"jj",@"jay", nil];</code>

<code>  </code><code>id</code> <code>money = </code><code>@20</code><code>;                自動生成:    </code><code>nsnumber</code> <code>*money1 = [[</code><code>nsnumber</code> <code>alloc] initwithint:20];</code>

二、程式設計題

11、用兩種不同的思路編寫函數來計算下面的式子:

     1+2+3+4+。。。。。+n(n&gt;=1)(ps:一共要寫兩個函數,僅僅再for/while/do之間更換不算新的思路)

     思路一:

<code>- (</code><code>nsinteger</code><code>)addton1:(</code><code>nsinteger</code><code>)n {</code>

<code>    </code><code>nsinteger</code> <code>total = 0;</code>

<code>    </code><code>for</code><code>(</code><code>int</code> <code>i=1;i&lt;=n;i++) {</code>

<code>        </code><code>total +=i;</code>

<code>    </code><code>}</code>

<code>    </code><code>return</code> <code>total;</code>

思路二、

<code>- (</code><code>nsinteger</code><code>)addton2:(</code><code>nsinteger</code><code>)n {</code>

<code>  </code><code>nsinteger</code> <code>total = 0;</code>

<code>  </code><code>total = n*(n+1)/2;</code>

<code>  </code><code>return</code> <code>total;</code>

<code>   </code><code>}</code>

12、使用category給某類(哪個類自己思考)增加一個方法,用來完成以下功能:假設一個oc可變數組存放着很多整數字元串,比如@“10”、@“20”.要求調用完這個方法之後,這個數組裡面的數字字元是升序排列的,(從小到大排列)

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

<code>     </code><code>nsmutablearray</code><code>+additions.h</code>

<code>//</code>

<code>//  nsmutablearray+additions.h</code>

<code>//  mianshidemo</code>

<code>//  created by zhanggui on 15/7/19.</code>

<code>//  copyright (c) 2015年 zhanggui. all rights reserved.</code>

<code> </code> 

<code>#import &lt;foundation/foundation.h&gt;</code>

<code>@interface</code> <code>nsmutablearray</code> <code>(additions)</code>

<code>+(</code><code>nsmutablearray</code> <code>*)sortvalues:(</code><code>nsmutablearray</code> <code>*)mutablearray;</code>

<code>@end</code>

<code>nsmutablearray</code><code>+additions.m</code>

<code>//  nsmutablearray+additions.m</code>

<code>#import "nsmutablearray+additions.h"</code>

<code>@implementation</code> <code>nsmutablearray</code> <code>(additions)</code>

<code>+(</code><code>nsmutablearray</code> <code>*)sortvalues:(</code><code>nsmutablearray</code> <code>*)mutablearray</code>

<code>    </code><code>nscomparator</code> <code>findersort = ^(</code><code>id</code> <code>string1,</code><code>id</code> <code>string2) {</code>

<code>        </code><code>if</code> <code>([string1 integervalue]&gt;[string2 integervalue]) {</code>

<code>            </code><code>return</code> <code>(</code><code>nscomparisonresult</code><code>)</code><code>nsordereddescending</code><code>;</code>

<code>        </code><code>}</code><code>else</code> <code>if</code> <code>([string1 integervalue]&lt;[string2 integervalue])</code>

<code>        </code><code>{</code>

<code>            </code><code>return</code> <code>(</code><code>nscomparisonresult</code><code>)</code><code>nsorderedascending</code><code>;</code>

<code>        </code><code>}</code><code>else</code>

<code>            </code><code>return</code> <code>(</code><code>nscomparisonresult</code><code>)</code><code>nsorderedsame</code><code>;</code>

<code>        </code><code>}</code>

<code>    </code><code>nsmutablearray</code> <code>*arr= [[</code><code>nsmutablearray</code> <code>alloc] initwithcapacity:[mutablearray count]];</code>

<code>    </code><code>nsarray</code> <code>*sortedarr = [mutablearray sortedarrayusingcomparator:findersort];</code>

<code>    </code><code>for</code><code>(</code><code>int</code> <code>i=0;i&lt;[mutablearray count];i++) {</code>

<code>        </code><code>[arr addobject:[sortedarr objectatindex:i]];</code>

<code>    </code><code>return</code> <code>arr;</code>

<code>測試方法:</code>

<code>- (</code><code>void</code><code>)viewdidload {</code>

<code>    </code><code>[</code><code>super</code> <code>viewdidload];</code>

<code>    </code><code>nsmutablearray</code> <code>*mutablearray = [[</code><code>nsmutablearray</code> <code>alloc] initwithobjects:@</code><code>"5"</code><code>,@</code><code>"20"</code><code>,@</code><code>"3"</code><code>,@</code><code>"60"</code> <code>,@</code><code>"50"</code><code>,</code><code>nil</code><code>];</code>

<code>    </code><code>nslog</code><code>(@</code><code>"%@"</code><code>,[</code><code>nsmutablearray</code> <code>sortvalues:mutablearray]);</code>

<code>13、使用category給所有oc對象增加一個run方法(對象方法),然後在run方法中</code><code>nslog</code><code>列印對象本身:</code>

<code>     </code><code>nsobject</code><code>+additions.h</code>

<code>      </code><code>//</code>

<code>//  nsobject+additions.h</code>

<code>@interface</code> <code>nsobject</code> <code>(additions)</code>

<code>-(</code><code>void</code><code>)run;</code>

<code>nsobject</code><code>+additions.m</code>

<code>//  nsobject+additions.m</code>

<code>#import "nsobject+additions.h"</code>

<code>@implementation</code> <code>nsobject</code> <code>(additions)</code>

<code>-(</code><code>void</code><code>)run</code>

<code>    </code><code>nslog</code><code>(@</code><code>"%@"</code><code>,</code><code>self</code><code>);</code>

14、使用category給nsstring類增加以下功能(需要用到的方法自己查資料或者猜)

計算英文字母的個數(比如@“235432534rre4645eer”,調用方法之後傳回6)

字元串反轉(比如@“abc”,調用後輸出@“cba”)

去除字元串兩端空格(比如@“  jack roce ”,調用後傳回@“jack rose”)

截取網站域名中的www.和.com之間的字元串(比如@“http://www.baidu.com”,輸出baidu)。

<code>  </code><code>nsstring</code><code>+additions.h</code>

<code>//  nsstring+additions.h</code>

<code>@interface</code> <code>nsstring</code> <code>(additions)</code>

<code>/**判斷nsstring中含有的字母個數*/</code>

<code>-(</code><code>nsinteger</code><code>)getnumberofletterinstring;</code>

<code>/**反轉字元串*/</code>

<code>-(</code><code>nsstring</code> <code>*)reversalstring;</code>

<code>//删除開始和結束的字元串</code>

<code>-(</code><code>nsstring</code> <code>*)deletebackandforwardblank;</code>

<code>//得到域名</code>

<code>-(</code><code>nsstring</code> <code>*)getdominfromweblink;</code>

<code>nsstring</code><code>+additions.m</code>

<code>     </code><code>//</code>

<code>//  nsstring+additions.m</code>

<code>#import "nsstring+additions.h"</code>

<code>@implementation</code> <code>nsstring</code> <code>(additions)</code>

<code>-(</code><code>nsinteger</code><code>)getnumberofletterinstring</code>

<code>    </code><code>nsinteger</code> <code>strlength = </code><code>self</code><code>.length;</code>

<code>    </code><code>int</code> <code>result = (</code><code>int</code><code>)strlength;</code>

<code>    </code><code>for</code><code>(</code><code>int</code> <code>i=0;i&lt;strlength;i++) {</code>

<code>        </code><code>char</code> <code>c = [</code><code>self</code> <code>characteratindex:i];</code>

<code>        </code><code>if</code> <code>(c&gt;=</code><code>'0'</code> <code>&amp;&amp; c&lt;= </code><code>'9'</code><code>) {     </code><code>//判斷是不是數字</code>

<code>            </code><code>result = result-1;</code>

<code>            </code><code>nslog</code><code>(@</code><code>"數字有:%c"</code><code>,c);</code>

<code>    </code><code>return</code> <code>result;</code>

<code>-(</code><code>nsstring</code> <code>*)reversalstring</code>

<code>    </code><code>nsmutablestring</code> <code>*s = [</code><code>nsmutablestring</code> <code>string];</code>

<code>    </code><code>nsuinteger</code> <code>length = </code><code>self</code><code>.length;</code>

<code>    </code><code>for</code><code>(</code><code>nsuinteger</code> <code>i=length;i&gt;0;i--) {</code>

<code>        </code><code>[s appendstring:[</code><code>self</code> <code>substringwithrange:</code><code>nsmakerange</code><code>(i-1, 1)]];</code>

<code>    </code><code>return</code> <code>s;</code>

<code>-(</code><code>nsstring</code> <code>*)deletebackandforwardblank</code>

<code>   </code> 

<code>    </code><code>nsstring</code> <code>*trimmedstring = [</code><code>self</code> <code>stringbytrimmingcharactersinset:[</code><code>nscharacterset</code> <code>whitespaceandnewlinecharacterset]];</code>

<code>  </code> 

<code>    </code><code>return</code> <code>trimmedstring;</code>

<code>-(</code><code>nsstring</code> <code>*)getdominfromweblink</code>

<code>    </code><code>nsstring</code> <code>*tempstring = [</code><code>nsstring</code> <code>string];</code>

<code>    </code><code>nsrange</code> <code>wwwrange = [</code><code>self</code> <code>rangeofstring:@</code><code>"www."</code><code>];</code>

<code>    </code><code>nsrange</code> <code>comrange = [</code><code>self</code> <code>rangeofstring:@</code><code>".com"</code><code>];</code>

<code>    </code><code>nsrange</code> <code>needrange =</code><code>nsmakerange</code><code>(wwwrange.length+wwwrange.location, comrange.location-wwwrange.location-wwwrange.length);</code>

<code>    </code><code>tempstring = [</code><code>self</code> <code>substringwithrange:needrange];</code>

<code>    </code><code>return</code> <code>tempstring;</code>

15、定義一個書本類,需要有名字、價格、出版年份(比如2014年)三個成員屬性,建立5個書本對象,屬性可以任意值,但名字不要使用中文

增加一個便利構造方法(工廠方法),用于快速建立對象

使用nslog直接輸出書本對象時,要保證輸出字元串格式為:這本書叫做xx,價格是xx,出版年份是xx

對5本書本對象按照出版年份—》價格—》名字優先級從小到大排序(出版年份相同按照價格排序,價格相同按照名字排序)

上一篇: 折半查找