一、簡答題
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>=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<=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 <foundation/foundation.h></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]>[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]<[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<[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<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>=</code><code>'0'</code> <code>&& c<= </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>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本書本對象按照出版年份—》價格—》名字優先級從小到大排序(出版年份相同按照價格排序,價格相同按照名字排序)