iOS面試題(3)

1.#import和#include的區(qū)別 @class?

TA的最新館藏

明星| 媽媽快看這里有天使!透明感...

死者之書(shū) 第 1 第1話 鼠繪漫畫(huà)網(wǎng)

iOS中管理剪切板的UIPasteboard...[轉(zhuǎn)]iOS開(kāi)發(fā) UIWebView訪問(wèn)https協(xié)...

NSXMLParser

21個(gè)高質(zhì)量的Swift開(kāi)源iOS App

@class一般用于頭文件中需要聲明該類(lèi)的某個(gè)實(shí)例變量的時(shí)候用到,在m文 件中還是需要使

用#import

而#import比起#include的好處就是不會(huì)引起交叉編譯

2. readwrite,readonly,assign,retain,copy,nonatomic 屬性的作用

@property是 一個(gè)屬性訪問(wèn)聲明,擴(kuò)號(hào)內(nèi)支持以下幾個(gè)屬性:

1,getter=getName,setter=setName,設(shè)置setter與 getter的方法名

2,readwrite,readonly,設(shè)置可供訪問(wèn)級(jí)別

2,assign,setter方法直接賦值,不進(jìn)行任何retain操作,為了解決原類(lèi)型與環(huán)循引用問(wèn)題

3,retain,setter方法對(duì)參數(shù)進(jìn)行release舊值再retain新值,所有 實(shí)現(xiàn)都是這個(gè)順序(CC上

有相關(guān)資料)

4,copy,setter方法進(jìn)行Copy操作,與retain處理流程一樣,先舊值release,再 Copy出新

的對(duì)象,retainCount為1。這是為了減少對(duì)上下文的依賴(lài)而引入的機(jī)制。

5,nonatomic,非原子性訪問(wèn),不加同步, 多線程并發(fā)訪問(wèn)會(huì)提高性能。注意,如果不加

此屬性,則默認(rèn)是兩個(gè)訪問(wèn)方法都為原子型事務(wù)訪問(wèn)。鎖被加到所屬對(duì)象實(shí)例級(jí)(我是這么理

解的...)。

3.在一個(gè)對(duì)象的方法里面:self.name= “object”;和 name =”object” 有什么不

同嗎?

答:

self.name =”object”:會(huì)調(diào)用對(duì)象的setName()方法;

name = “object”:會(huì)直接把object賦值給當(dāng)前對(duì)象的name屬性。4.請(qǐng)簡(jiǎn)述self.name= nil的機(jī)制,以及與[namerelease]的區(qū)別?

self.name =nil; //使用nil參數(shù)調(diào)用setName:方法

[name release]生成的訪問(wèn)器將自動(dòng)釋放以前的name對(duì)象5.請(qǐng)簡(jiǎn)要說(shuō)明viewDidLoad和viewDidUnload何時(shí)調(diào)用

答:

viewDidLoad在view從nib文件初始化時(shí)調(diào)用,

loadView在controller的view為nil時(shí)調(diào)用。此方法在編程實(shí)現(xiàn)view時(shí)調(diào)用,view控制器默認(rèn)會(huì)注冊(cè)memory warning notification,當(dāng)view controller的任何view沒(méi)有用的時(shí)候,viewDidUnload會(huì)被調(diào)用,在這里實(shí)現(xiàn)將retain的view release,如果是retain的IBOutlet vi

推薦閱讀

更多

iOS進(jìn)階面試題

10個(gè)Objective上級(jí)向的十個(gè)iOS面試問(wèn)題

你使用 Autolayout 是使用 Storyb...iOS7隱藏狀態(tài)欄 status Bar個(gè)人常用iOS第三方庫(kù)以及XCode...Xcode6中自動(dòng)布局autolayout和si...IOS面試寶典

iOS經(jīng)典面試題

wintelsui

212 館藏 873

ew 屬性則不要在這里release,IBOutlet會(huì)負(fù)責(zé)release 。

6.實(shí)例化一個(gè)UITableView對(duì)象,要求寫(xiě)出關(guān)鍵語(yǔ)句?

答:UITableView *my = [[UITableView alloc]initWithFrame:<(CGRect)frame> style:<(UI

TableViewStyle)style>];

my.delegate = self;

my.dataSource = self;

首先需要分配空間設(shè)置表格類(lèi)型

然后需要設(shè)置兩個(gè)必須的委托對(duì)象。

7.使用sql語(yǔ)句查詢(xún)出省名以湖開(kāi)頭,郵編為436001所在的市區(qū)?(5分)(表名及字

段名自定義)

select*fromcitys where postcode=436001 and province=’湖%’;8.打印結(jié)果

main()

{

int a[5]={1,2,3,4,5};

int *ptr=(int *)(&a+1);printf(“%d,%d”,*(a+1),*(ptr-1));

}

答:2,5

*(a+1)就是a[1],*(ptr-1)就是a[4],執(zhí)行結(jié)果是2,5&a+1不是首地址+1,系統(tǒng)會(huì)認(rèn)為加一個(gè)a數(shù)組的偏 移,是偏移了一個(gè)數(shù)組的大小(本例是5個(gè)int)

int *ptr=(int *)(&a+1);

則ptr實(shí)際 是&(a[5]),也就是a+5

原因如下:

&a是數(shù)組指針,其類(lèi)型為 int (*)[5];

而 指針加1要根據(jù)指針類(lèi)型加上一定的值,不同類(lèi)型的指針+1之后增加的大小不同。a是長(zhǎng)度為5的int數(shù)組指針,所以要加 5*sizeof(int)

所以ptr實(shí)際是a[5]

但是prt與(&a+1)類(lèi)型是不一樣的(這點(diǎn)很重要)

所以prt-1只會(huì)減去sizeof(int*)

a,&a的地址是一樣的,但意思不一樣

a是數(shù)組首地址,也就是a[0]的地址,&a是對(duì)象(數(shù)組)首地址,

a+1是數(shù)組下一元素的地址,即a[1],&a+1是下一個(gè)對(duì)象的地址,即a[5].

void Func ( char str[100] ){

sizeof(str ) = ?

}

void*p = malloc( 100 ); sizeof( p ) = ?

這題 很常見(jiàn)了,Func ( char str[100] )函數(shù)中數(shù)組名作為函數(shù)形參時(shí),在函數(shù)體內(nèi),數(shù)組名失

關(guān)閉

關(guān)閉

去了本身的內(nèi)涵,僅僅只是一個(gè)指針;在失去其內(nèi)涵的同時(shí),它還失去了其常量特性,可以作

自增、自減等操作,可以被修改。Windows NT 32位平臺(tái)下,指針的長(zhǎng)度(占用內(nèi)存的大小

)為4字節(jié),故sizeof( str ) 、sizeof( p ) 都為4。

9.用預(yù)處理指令#define聲明一個(gè)常數(shù),用以表明1年中有多少秒(忽略閏年問(wèn)題)

答:#defineSECONDS_PER_YEAR (60 * 60 * 24 * 365)UL

我在這想看到幾件事情:

#define 語(yǔ)法的基本知識(shí)(例如:不能以分號(hào)結(jié)束,括號(hào)的使用,等等)

懂得預(yù)處理器將為你計(jì)算常數(shù)表達(dá)式的值,因此,直接寫(xiě)出你是如何計(jì)算一年中有多少秒而不

是計(jì)算出實(shí)際的值,是更清晰而沒(méi)有代價(jià)的。

意識(shí)到這個(gè)表達(dá)式將使一個(gè)16位機(jī)的整型數(shù)溢出-因此要用到長(zhǎng)整型符號(hào)L,告訴編譯器這個(gè)常

數(shù)是的長(zhǎng)整型數(shù)。

如果你在你的表達(dá)式中用到UL(表示無(wú)符號(hào)長(zhǎng)整型),那么你有了一個(gè)好的起點(diǎn)。記住,第

一印象很重要。

10.寫(xiě)一” 標(biāo)準(zhǔn)”宏MIN ,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)

答:#define MIN(A,B) ((A) <= (B) ? (A) : (B))

這個(gè)測(cè)試是為下面的目的而設(shè)的:

標(biāo)識(shí)#define在宏中應(yīng)用的基本知識(shí)。這是很重要的,因?yàn)橹钡角度?inline)操作符變?yōu)闃?biāo)準(zhǔn)C

的一部分,宏是方便產(chǎn)生嵌入代碼的唯一方

法,對(duì)于嵌入式系統(tǒng)來(lái)說(shuō),為了能達(dá)到要求的性能,嵌入代碼經(jīng)常是必須的方法。

三重條件操作符的知識(shí)。這個(gè)操作符存在C語(yǔ)言中的原因是它使得編譯器能產(chǎn)生比 if-then-els

e 更優(yōu)化的代碼,了解這個(gè)用法是很重要的。 懂得在宏中小心地把參數(shù)用括號(hào)括起來(lái) 我也用

這個(gè)問(wèn)題開(kāi)始討論宏的副作用,例如:當(dāng)你寫(xiě)下面的代碼時(shí)會(huì)發(fā)生什么事? least = MIN(*p

++, b);

結(jié)果是:

((*p++) <= (b) ? (*p++) :(*p++))

這個(gè)表達(dá)式會(huì)產(chǎn)生副作用,指針p會(huì)作三次++自增操作。

11.數(shù)組和指針的區(qū)別

(1)數(shù)組可以申請(qǐng)?jiān)跅^(qū)和數(shù)據(jù)區(qū);指針可以指向任意類(lèi)型的內(nèi)存塊

(2)sizeof作用于數(shù)組時(shí),得到的是數(shù)組所占的內(nèi)存大小;作用于指針時(shí),得到的都是4個(gè)字

節(jié)的大小

(3)數(shù)組名表示數(shù)組首地址,值不可以改變,如不可以將++作用于數(shù)組名上;普通指針的

值可以改變,如可將++作用于指針上

(4)用字符串初始化字符數(shù)組是將字符串的內(nèi)容拷貝到字符數(shù)組中;用字符串初始化字符指

針是將字符串的首地址賦給指針,也就是指針指向了該數(shù)組

12.static的作用

(1)函數(shù)體內(nèi)static 變量的作用范圍為該函數(shù)體,不同于 auto 變量,該變量的內(nèi)存只被分

配一次,

因此其值在下次調(diào)用時(shí)仍維持上次的值;

(2)在模塊內(nèi)的static 全局變量可以被模塊內(nèi)所用函數(shù)訪問(wèn),但不能被模塊外其它函數(shù)訪問(wèn)

;

(3)在模塊內(nèi)的static 函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用,這個(gè)函數(shù)的使用范圍被限制

在聲明

它的模塊內(nèi);

(4)在類(lèi)中的static 成員變量屬于整個(gè)類(lèi)所擁有,對(duì)類(lèi)的所有對(duì)象只有一份拷貝;

(5)在類(lèi)中的static 成員函數(shù)屬于整個(gè)類(lèi)所擁有,這個(gè)函數(shù)不接收 this 指針,因而只能訪問(wèn)

類(lèi)的static 成員變量。

13.簡(jiǎn)述內(nèi)存分區(qū)情況

(1)代碼區(qū):存放函數(shù)二進(jìn)制代碼

(2)數(shù)據(jù)區(qū):系統(tǒng)運(yùn)行時(shí)申請(qǐng)內(nèi)存并初始化,系統(tǒng)退出時(shí)由系統(tǒng)釋放。存放全局變量、靜態(tài)

變量、常量

(3)堆區(qū):通過(guò)malloc等函數(shù)或new等操作符動(dòng)態(tài)申請(qǐng)得到,需程序員手動(dòng)申請(qǐng)和釋放

(4)棧區(qū):函數(shù)模塊內(nèi)申請(qǐng),函數(shù)結(jié)束時(shí)由系統(tǒng)自動(dòng)釋放。存放局部變量、函數(shù)參數(shù)

14.#include和#include”filename”有什么區(qū)別

答:#include直接在庫(kù)文件目錄中搜索所包含的文件;#include”filename”

在當(dāng)前目錄下搜索所包含的文件,如果沒(méi)有的話再到庫(kù)文件目錄搜索。

15.const char *p; charconst*p; char*const p; const char* const p;四個(gè)修飾指

針有什么區(qū)別

答: (1)定義了一個(gè)指向不可變的字符串的字符指針

(2)和(1)一樣(3)定義了一個(gè)指向字符串的指針,該指針值不可改變,即不可改變指向(4)定義了一個(gè)指向不可變的字符串的字符指針,且該指針也不可改變指向16.MVC的理解?

答:MVC模式考慮三種對(duì)象:模型對(duì)象、視圖對(duì)象和控制器對(duì)象。 模型對(duì)象負(fù)責(zé)應(yīng)用程序的

數(shù)據(jù)和定義操作數(shù)據(jù)的邏輯; 視圖對(duì)象知道如何顯示應(yīng)用程序的模型數(shù)據(jù); 控制器對(duì)象是M

與V之間的協(xié)調(diào)者。

17.在Obj-c中有沒(méi)有私有方法?私有變量?一般采用什么方法實(shí)現(xiàn)?

objective-c – 類(lèi)里面的方法只有兩種, 靜態(tài)方法和實(shí)例方法. 這似乎就不是完整的面向?qū)ο罅?

按照OO的原則就是一個(gè)對(duì)象只暴露有用的東西. 如果沒(méi)有了私有方法的話, 對(duì)于一些小范圍的

代碼重用就不那么順手了. 在類(lèi)里面聲名一個(gè)私有方法

@interfaceController : NSObject { NSString *something; }+(void)thisIsAStaticMethod;-(void)thisIsAnInstanceMethod;

@end

@interfaceController (private)

-(void)thisIsAPrivateMethod;

@end

@private可以用來(lái)修飾私有變量在Objective‐C中,所有實(shí)例變量默認(rèn)都是私有的,所有實(shí)例方法默認(rèn)都是公有的18.OC中加號(hào)方法與減號(hào)的區(qū)別?

加號(hào)方法是類(lèi)方法,屬于靜態(tài)方法減號(hào)方法是實(shí)例方法必須由類(lèi)的實(shí)例來(lái)調(diào)用

19.free與release的區(qū)別

20.在終端環(huán)境下,分別說(shuō)明4,2,1,0對(duì)應(yīng)的權(quán)限是什么

21.ARC機(jī)制

ARC就是automatic reference counting ,簡(jiǎn)單說(shuō)就是就是代碼中自動(dòng)加入了retain/release

,原先需要手動(dòng)添加的用來(lái)處理內(nèi)存管理的引用計(jì)數(shù)的代碼可以自動(dòng)地由編譯器完成了。

使用ARC的好處

使用ARC有什么好處呢?

看到上面的例子,大家就知道了,以后寫(xiě)Objective-C的代碼變得簡(jiǎn)單多了,因?yàn)槲覀儾恍枰?/p>

擔(dān)心煩人的內(nèi)存管理,擔(dān)心內(nèi)存泄露了

代碼的總量變少了,看上去清爽了不少,也節(jié)省了勞動(dòng)力代碼高速化,由于使用編譯器管理引用計(jì)數(shù),減少了低效代碼的可能性

不好的地方

記住一堆新的ARC規(guī)則—關(guān)鍵字及特性等需要一定的學(xué)習(xí)周期一些舊的代碼,第三方代碼使用的時(shí)候比較麻煩;修改代碼需要工數(shù),要么修改編譯開(kāi)關(guān)

22.自動(dòng)釋放池是什么,如何工作

當(dāng)您向一個(gè)對(duì)象發(fā)送一個(gè)autorelease 消息時(shí),Cocoa就會(huì)將該對(duì)象的一個(gè)引用放入到最新的

自動(dòng)釋放池。它仍然是個(gè)正當(dāng)?shù)膶?duì)象,因此自動(dòng)釋放池定義的作用域內(nèi)的其它對(duì)象可以向它發(fā)

送消息。當(dāng)程序執(zhí)行到作用域結(jié)束的位置時(shí),自動(dòng)釋放池就會(huì)被釋放,池中的所有對(duì)象也就被

釋放。

1. ojc-c 是 通過(guò)一種”referring counting”(引用計(jì)數(shù))的方式來(lái)管理內(nèi)存的, 對(duì)象在開(kāi)始分配

內(nèi)存(alloc)的時(shí)候引用計(jì)數(shù)為一,以后每當(dāng)碰到有copy,retain的時(shí)候引用計(jì)數(shù)都會(huì)加一, 每當(dāng)碰

到release和autorelease的時(shí)候引用計(jì)數(shù)就會(huì)減一,如果此對(duì)象的計(jì)數(shù)變?yōu)榱?, 就會(huì)被系統(tǒng)銷(xiāo)

毀.

2. NSAutoreleasePool 就是用來(lái)做引用計(jì)數(shù)的管理工作的,這個(gè)東西一般不用你管的.

3. autorelease和release沒(méi)什么區(qū)別,只是引用計(jì)數(shù)減一的時(shí)機(jī)不同而已,autorelease會(huì)在對(duì)象的使用真正結(jié)束的時(shí)候才做引用計(jì)數(shù)減一.

23.ViewController 的 loadView, viewDidLoad,viewDidUnload 分別是在什么時(shí)候調(diào)用的?

在自定義ViewController的時(shí)候這幾個(gè)函數(shù)里面應(yīng)該做什么工作?

viewDidLoad在view 從nib文件初始化時(shí)調(diào)用,loadView在controller的view為nil時(shí)調(diào)用。

此方法在編程實(shí)現(xiàn)view時(shí)調(diào)用,view 控制器默認(rèn)會(huì)注冊(cè)memory warning notification,當(dāng)vie

w controller的任何view 沒(méi)有用的時(shí)候,viewDidUnload會(huì)被調(diào)用,在這里實(shí)現(xiàn)將retain 的v

iew release,如果是retain的IBOutlet view 屬性則不要在這里release,IBOutlet會(huì)負(fù)責(zé)release

。

24. 淺復(fù)制和深復(fù)制的區(qū)別?//淺拷貝和深拷貝

答案:

淺層復(fù)制(copy):只復(fù)制指向?qū)ο蟮闹羔?而不復(fù)制引用對(duì)象本身。//通過(guò)對(duì)象的指針來(lái)

訪問(wèn)這個(gè)對(duì)象

深層復(fù)制(mutableCopy):復(fù)制引用對(duì)象本身 意思就是有個(gè)A對(duì)象,復(fù)制一份后得到A_co

py對(duì)象后,對(duì)于淺復(fù)制來(lái)說(shuō),A和A_copy指向的是同一個(gè)內(nèi)存資源,復(fù)制的只不過(guò)是是一個(gè)

指針,對(duì)象本身資源 還是只有一份,那如果我們對(duì)A_copy執(zhí)行了修改操作,那么發(fā)現(xiàn)A引用的

對(duì)象同樣被修改,這其實(shí)違背了我們復(fù)制拷貝的一個(gè)思想。深復(fù)制就好理解了,內(nèi)存中存在了

兩份獨(dú)立對(duì)象本身。//當(dāng)修改A時(shí),A copy不變。

25. frame和bounds有什么不同?

答案:frame指的是:該view在父view坐標(biāo)系統(tǒng)中的位置和大小。(參照點(diǎn)是父親的坐標(biāo)系統(tǒng)

)//frame:框架、結(jié)構(gòu)

bounds指的是:該view在本身坐標(biāo)系統(tǒng)中 的位置和大小。(參照點(diǎn)是本身坐標(biāo)系統(tǒng))//bou

nds:界限

26. obj-c的優(yōu)缺點(diǎn)答案:

objc優(yōu)點(diǎn):

1) Cateogies

2) Posing

3) 動(dòng)態(tài)識(shí)別

4) 指標(biāo)計(jì)算

5)彈性訊息傳遞

6) 不是一個(gè)過(guò)度復(fù)雜的 C 衍生語(yǔ)言

7) Objective-C 與 C++ 可混合編程

缺點(diǎn):

1) 不支援命名空間

2) 不支持運(yùn)算符重載

3) 不支持多重繼承

4) 使用動(dòng)態(tài)運(yùn)行時(shí)類(lèi)型,所有的方法都是函數(shù)調(diào)用,所以很多編譯時(shí)優(yōu)化方法都用不到。(

如內(nèi)聯(lián)函數(shù)等),性能低劣。

27. 用變量a給出下面的定義

a) 一個(gè)整型數(shù)(An integer)

b)一個(gè)指向整型數(shù)的指針( A pointer to aninteger)

c)一個(gè)指向指針的的指針,它指向的指針是指向一個(gè)整型數(shù)( Apointer to a pointer

to an intege)r

d)一個(gè)有10個(gè)整型數(shù)的數(shù)組( An array of 10 integers)

e) 一個(gè)有10個(gè)指針的數(shù)組,該指針是指向一個(gè)整型數(shù)的。(An array of 10 pointers

to integers)

f) 一個(gè)指向有10個(gè)整型數(shù)數(shù)組的指針( A pointer to an array of 10 integers)

g) 一個(gè)指向函數(shù)的指針,該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù)(Apointer to a fu

nction that takes an integer as an argument

andreturns an integer)

h)一個(gè)有10個(gè)指針的數(shù)組,該指針指向一個(gè)函數(shù),該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整

型數(shù)( An array of ten pointers to functions t

hat takean integer argument and return an integer )答案是:

a) int a; // Aninteger

b) int *a; // A pointer to aninteger

c) int **a; // A pointer to apointer to an integer

d) int a[10]; // An array of10 integers

e) int *a[10]; // An array of10 pointers to integers

f) int (*a)[10]; // A pointerto an array of 10 integers

g) int (*a)(int); // A pointerto a function a that takes an integer argument and returns

aninteger

h) int (*a[10])(int); // Anarray of 10 pointers to functions that take an integer argume

nt andreturn an integer

28. 寫(xiě)出幾個(gè)死循環(huán)?

29. 隊(duì)列和棧有什么區(qū)別:

答:隊(duì)列和棧是兩種不同的數(shù)據(jù)容器。從”數(shù)據(jù)結(jié)構(gòu)”的角度看,它們都是線性結(jié)構(gòu),即數(shù)據(jù)

元素之間的關(guān)系相同。

隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),它在兩端進(jìn)行操作,一端進(jìn)行入隊(duì)列操作,一端進(jìn)行出列隊(duì)

操作。

棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),它只能在棧頂進(jìn)行操作,入棧和出棧都在棧頂操作。30.HTTP協(xié)議中,POST和GET的區(qū)別是什么?

答案:1.GET 方法

GET 方法提交數(shù)據(jù)不安全,數(shù)據(jù)置于請(qǐng)求行,客戶端地址欄可見(jiàn);

GET 方法提交的數(shù)據(jù)大小有限

GET 方法不可以設(shè)置書(shū)簽

2.POST 方法

POST 方法提交數(shù)據(jù)安全,數(shù)據(jù)置于消息主體內(nèi),客戶端不可見(jiàn)POST 方法提交的數(shù)據(jù)大小沒(méi)有限制

POST 方法可以設(shè)置書(shū)簽

31. iOS的系統(tǒng)架構(gòu)分為( 核心操作系統(tǒng)層 theCore OS layer )、( 核心服務(wù)層theCore S

ervices layer )、( 媒體層 theMedia layer )和( Cocoa 界面服務(wù)層 the Cocoa Touch l

ayer )四個(gè)層次。

32. 控件主要響應(yīng)3種事件:( 基于觸摸的事件 )、( 基于值的事件 )和( 基于編輯的事

件 )。

33. xib文件的構(gòu)成分為哪3個(gè)圖標(biāo)?都具有什么功能。(10分)

答: File’s Owner 是所有 nib 文件中的每個(gè)圖標(biāo),它表示從磁盤(pán)加載 nib 文件的對(duì)象;First Responder 就是用戶當(dāng)前正在與之交互的對(duì)象;

View 顯示用戶界面;完成用戶交互;是 UIView 類(lèi)或其子類(lèi)。

34. 簡(jiǎn)述視圖控件器的生命周期(10分)。

答: loadView 盡管不直接調(diào)用該方法,如多手動(dòng)創(chuàng)建自己的視圖,那么應(yīng)該覆蓋這個(gè)方法并

將它們賦值給試圖控制器的 view 屬性。

viewDidLoad 只有在視圖控制器將其視圖載入到內(nèi)存之后才調(diào)用該方法,這是執(zhí)行任何其他

初始化操作的入口。

viewDidUnload 當(dāng)試圖控制器從內(nèi)存釋放自己的方法的時(shí)候調(diào)用,用于清楚那些可能已經(jīng)在

試圖控制器中創(chuàng)建的對(duì)象。

viewVillAppear 當(dāng)試圖將要添加到窗口中并且還不可見(jiàn)的時(shí)候或者上層視圖移出圖層后本視

圖變成頂級(jí)視圖時(shí)調(diào)用該方法,用于執(zhí)行諸如改變視圖方向等的操作。實(shí)現(xiàn)該方法時(shí)確保調(diào)用

[super viewWillAppear:].

viewDidAppear 當(dāng)視圖添加到窗口中以后或者上層視圖移出圖層后本視圖變成頂級(jí)視圖時(shí)調(diào)

用,用于放置那些需要在視圖顯示后執(zhí)行的代碼。確保調(diào)用 [super viewDidAppear: ] 。

35. 動(dòng)畫(huà)有基本類(lèi)型有哪幾種;表視圖有哪幾種基本樣式(10分)?

答:動(dòng)畫(huà)有兩種基本類(lèi)型:隱式動(dòng)畫(huà)和顯式動(dòng)畫(huà)。

36. 實(shí)現(xiàn)簡(jiǎn)單的表格顯示需要設(shè)置UITableView的什么屬性、實(shí)現(xiàn)什么協(xié)議(10分)?

答:實(shí)現(xiàn)簡(jiǎn)單的表格顯示需要設(shè)置 UITableView 的 dataSource 和 delegate 屬性,實(shí)現(xiàn)UIT

ableViewDataSource 和 UITableViewDelegate 協(xié)議。

37. Cocoa Touch提供了哪幾種Core Animation過(guò)渡類(lèi)型(10分)?

答: Cocoa Touch 提供了 4 種 Core Animation 過(guò)渡類(lèi)型,分別為:交叉淡化、推擠、顯示

和覆蓋。

38. UIView與CLayer有什么區(qū)別(10分)?

答: 1. UIView 是 iOS 系統(tǒng)中界面元素的基礎(chǔ),所有的界面元素都是繼承自它。它本身完全

是由 CoreAnimation 來(lái)實(shí)現(xiàn)的。它真正的繪圖部分,是由一個(gè) CALayer 類(lèi)來(lái)管理。 UIView

本身更像是一個(gè) CALayer 的管理器,訪問(wèn)它的跟繪圖和跟坐標(biāo)有關(guān)的屬性。

2. UIView 有個(gè)重要屬性 layer ,可以返回它的主 CALayer 實(shí)例。

3. UIView 的 CALayer 類(lèi)似 UIView 的子 View 樹(shù)形結(jié)構(gòu),也可以向它的 layer 上添加子laye

r ,來(lái)完成某些特殊的表示。即 CALayer 層是可以嵌套的。

4. UIView 的 layer 樹(shù)形在系統(tǒng)內(nèi)部,被維護(hù)著三份 copy 。分別是邏輯樹(shù),這里是代碼可以

操縱的;動(dòng)畫(huà)樹(shù),是一個(gè)中間層,系統(tǒng)就在這一層上更改屬性,進(jìn)行各種渲染操作;顯示樹(shù),

其內(nèi)容就是當(dāng)前正被顯示在屏幕上得內(nèi)容。

5. 動(dòng)畫(huà)的運(yùn)作:對(duì) UIView 的 subLayer (非主 Layer )屬性進(jìn)行更改,系統(tǒng)將自動(dòng)進(jìn)行動(dòng)

畫(huà)生成,動(dòng)畫(huà)持續(xù)時(shí)間的缺省值似乎是 0.5 秒。

6. 坐標(biāo)系統(tǒng): CALayer 的坐標(biāo)系統(tǒng)比 UIView 多了一個(gè) anchorPoint 屬性,使用CGPoint

結(jié)構(gòu)表示,值域是 0~1 ,是個(gè)比例值。這個(gè)點(diǎn)是各種圖形變換的坐標(biāo)原點(diǎn),同時(shí)會(huì)更改 laye

r 的 position 的位置,它的缺省值是 {0.5,0.5} ,即在 layer 的中央。

7. 渲染:當(dāng)更新層,改變不能立即顯示在屏幕上。當(dāng)所有的層都準(zhǔn)備好時(shí),可以調(diào)用setNee

dsDisplay 方法來(lái)重繪顯示。

8. 變換:要在一個(gè)層中添加一個(gè) 3D 或仿射變換,可以分別設(shè)置層的 transform 或affineTra

nsform 屬性。

9. 變形: Quartz Core 的渲染能力,使二維圖像可以被自由操縱,就好像是三維的。圖像可

以在一個(gè)三維坐標(biāo)系中以任意角度被旋轉(zhuǎn),縮放和傾斜。 CATransform3D 的一套方法提供

了一些魔術(shù)般的變換效果。

39.鏈表翻轉(zhuǎn)。

40. 鏈表逆序(C語(yǔ)言)(10分)。鏈表逆序就是把一個(gè)鏈表按照原來(lái)的鏈接順序逆序?qū)崿F(xiàn)(也就是將頭變成尾,尾變成頭)。編程思路:其實(shí)最關(guān)鍵的是先通過(guò)原來(lái)的鏈接順序找到下個(gè)節(jié)點(diǎn),然后再把前個(gè)節(jié)點(diǎn)反序。41. Quatrz 2D的繪圖功能的三個(gè)核心概念是什么并簡(jiǎn)述其作用(10分)。答:上下文:主要用于描述圖形寫(xiě)入哪里;

路徑:是在圖層上繪制的內(nèi)容;

狀態(tài):用于保存配置變換的值、填充和輪廓, alpha 值等。

42. iPhone OS主要提供了幾種播放音頻的方法(10分)?

答: SystemSound Services

AVAudioPlayer 類(lèi)

Audio Queue Services

OpenAL

43. 使用AVAudioPlayer類(lèi)調(diào)用哪個(gè)框架、使用步驟(10分)?

答: AVFoundation.framework

步驟:配置 AVAudioPlayer 對(duì)象;

實(shí)現(xiàn) AVAudioPlayer 類(lèi)的委托方法;

控制 AVAudioPlayer 類(lèi)的對(duì)象;

監(jiān)控音量水平;

回放進(jìn)度和拖拽播放。

44. 有哪幾種手勢(shì)通知方法、寫(xiě)清楚方法名(10分)?

答:

-(void)touchesBegan:(NSSet*)touchedwithEvent:(UIEvent*)event;-(void)touchesMoved:(NSSet*)touched withEvent:(UIEvent*)event;-(void)touchesEnded:(NSSet*)touchedwithEvent:(UIEvent*)event;-(void)touchesCanceled:(NSSet*)touchedwithEvent:(UIEvent*)event;

45. 實(shí)例化一個(gè)UITableView對(duì)象,要求寫(xiě)出關(guān)鍵語(yǔ)句(10分)。

答: UITableView *my = [[UITableView alloc]initWithFrame:<(CGRect)frame> style:<(U

ITableViewStyle)style>];

my.delegate = self;

my.dataSource = self;

首先需要分配空間設(shè)置表格類(lèi)型

然后需要設(shè)置兩個(gè)必須的委托對(duì)象。

46. CFSocket使用有哪幾個(gè)步驟(10分)。

答:創(chuàng)建 Socket 的上下文;創(chuàng)建 Socket ;配置要訪問(wèn)的服務(wù)器信息;封裝服務(wù)器信息;連

接服務(wù)器;

47. Core Foundation中提供了哪幾種操作Socket的方法(10分)?答: CFNetwork 、 CFSocket 和 BSD Socket 。

48. 解析XML文件有哪幾種方式(10分)?

答:以 DOM 方式解析 XML 文件;以 SAX 方式解析 XML 文件;49. 自定義一個(gè)委托(15分)。

答: @protocol SimpleProtocol-(void)doSomething:(NSString*)str;

@end

@interfaceSimpleClass:NSObject< SimpleProtocol >{}

@end

@implementationSimpleClass-(void)doSomething:(NSString *)str

{

NSLog(str);

}

@end

50. 類(lèi)別的作用?繼承和類(lèi)別在實(shí)現(xiàn)中有何區(qū)別?

答案: category 可以在不獲悉,不改變?cè)瓉?lái)代碼的情況下往里面添加新的方法,只能添加,

不能刪除修改。 并且如果類(lèi)別和原來(lái)類(lèi)中的方法產(chǎn)生名稱(chēng)沖突,則類(lèi)別將覆蓋原來(lái)的方法,

因?yàn)轭?lèi)別具有更高的優(yōu)先級(jí)。 類(lèi)別主要有 3 個(gè)作用: (1) 將類(lèi)的實(shí)現(xiàn)分散到多個(gè)不同文件或

多個(gè)不同框架中。 (2) 創(chuàng)建對(duì)私有方法的前向引用。 (3) 向?qū)ο筇砑臃钦絽f(xié)議。 繼承可以增

加,修改方法,并且可以增加屬性。

51.通知和協(xié)議的不同之處?

答案:協(xié)議有控制鏈 (has-a) 的關(guān)系,通知沒(méi)有。 首先我一開(kāi)始也不太明白,什么叫控制鏈

(專(zhuān)業(yè)術(shù)語(yǔ)了 ~ )。但是簡(jiǎn)單分析下通知和代理的行為模式,我們大致可以有自己的理解 簡(jiǎn)

單來(lái)說(shuō),通知的話,它可以一對(duì)多,一條消息可以發(fā)送給多個(gè)消息接受者。代理按我們的理解

,到不是直接說(shuō)不能一對(duì)多,比如我們知道的明星經(jīng)濟(jì)代理人,很多時(shí)候一個(gè)經(jīng)濟(jì)人負(fù)責(zé)好幾

個(gè)明星的事務(wù)。 只是對(duì)于不同明星間,代理的事物對(duì)象都是不一樣的,一一對(duì)應(yīng),不可能說(shuō)

明天要處理 A 明星要一個(gè)發(fā)布會(huì),代理人發(fā)出處理發(fā)布會(huì)的消息后,別稱(chēng) B 的 發(fā)布會(huì)了。但

是通知就不一樣,他只關(guān)心發(fā)出通知,而不關(guān)心多少接收到感興趣要處理。 因此控制鏈( ha

s-a 從英語(yǔ)單詞大致可以看出,單一擁有和可控制的對(duì)應(yīng)關(guān)系。

52.關(guān)于多態(tài)性

答案:多態(tài),子類(lèi)指針可以賦值給父類(lèi)。 這個(gè)題目其實(shí)可以出到一切面向?qū)ο笳Z(yǔ)言中, 因此

關(guān)于多態(tài),繼承和封裝基本最好都有個(gè)自我意識(shí)的理解,也并非一定要把書(shū)上資料上寫(xiě)的能背

出來(lái)。 最重要的是轉(zhuǎn)化成自我理解。

53.對(duì)于單例的理解

答案:基本能用熟悉的語(yǔ)言寫(xiě)出一個(gè)單例,以及可以運(yùn)用到的場(chǎng)景或是你編程中碰到過(guò)運(yùn)用的

此種模式的框架類(lèi)等。 進(jìn)一步點(diǎn),考慮下如何在多線程訪問(wèn)單例時(shí)的安全性。

54. 是否在一個(gè)視圖控制器中嵌入兩個(gè)tableview控制器?

答案:一個(gè)視圖控制只提供了一個(gè) View 視圖,理論上一個(gè) tableViewController 也不能放吧

, 只能說(shuō)可以嵌入一個(gè) tableview 視圖。當(dāng)然,題目本身也有歧義,如果不是我們定性思維

認(rèn)為的 UIViewController , 而是宏觀的表示視圖控制者,那我們倒是可以把其看成一個(gè)視

圖控制者,它可以控制多個(gè)視圖控制器,比如 TabbarController 那樣的感覺(jué)。

55. 一個(gè)tableView是否可以關(guān)聯(lián)兩個(gè)不同的數(shù)據(jù)源?你會(huì)怎么處理?

答案:首先我們從代碼來(lái)看,數(shù)據(jù)源如何關(guān)聯(lián)上的,其實(shí)是在數(shù)據(jù)源關(guān)聯(lián)的代理方法里實(shí)現(xiàn)的

。 因此我們并不關(guān)心如何去關(guān)聯(lián)他,他怎么關(guān)聯(lián)上,方法只是讓我返回根據(jù)自己的需要去設(shè)

置如相關(guān)的數(shù)據(jù)源。 因此,我覺(jué)得可以設(shè)置多個(gè)數(shù)據(jù)源啊,但是有個(gè)問(wèn)題是,你這是想干嘛

呢?想讓列表如何顯示,不同的數(shù)據(jù)源分區(qū)塊顯示?

56. Object -c 的類(lèi)可以多重繼承么?可以實(shí)現(xiàn)多個(gè)接口么?重寫(xiě)一個(gè)類(lèi)的方式用繼承

好還是分類(lèi) 好?為什么?

答案: Objective-c 只支持單繼承,如果要實(shí)現(xiàn)多繼承的話,可以通過(guò)類(lèi)別和協(xié)議的方式來(lái)

實(shí)現(xiàn), cocoa 中所有的類(lèi)都是 NSObject 的子類(lèi),多繼承在這里是用 protocol 委托代理來(lái)

實(shí)現(xiàn)的。

57. id 聲明的對(duì)象有什么特性?

答案: id 是個(gè)很重要的類(lèi)型,是個(gè)可以指向任何類(lèi)型的指針或者可以理解為指向任何未知類(lèi)

型的指針。

58. 自動(dòng)釋放池跟GC (垃圾回收)有什么區(qū)別?iPhone上有GC么?[poolrelease]

和[pooldrain]有什么區(qū)別?

iPhone 上沒(méi)有 GC 。 iPhone 開(kāi)發(fā)的時(shí)候沒(méi)有垃圾回收機(jī)制。 在垃圾回收環(huán)境中,release

是一個(gè)空操作。因此, NSAutoreleasePool 提供了 drain 方法,在引用計(jì)數(shù)環(huán)境中,該方法

的作用等同于調(diào)用 release ,但在垃圾回收環(huán)境中,它會(huì)觸發(fā)垃圾回收(如果自上次垃圾回收

以來(lái)分配的內(nèi)存大于當(dāng)前的閾值)。因此,在通常情況下,您應(yīng)該使用 drain 而不是 release

來(lái)銷(xiāo)毀自動(dòng)釋放池。

59. 線程與進(jìn)程的區(qū)別和聯(lián)系?

答案 : 進(jìn)程和線程都是由操作系統(tǒng)所體會(huì)的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系

統(tǒng)對(duì)應(yīng)用的并發(fā)性。 程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式。進(jìn)程有

獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響,而線程只是一個(gè)

進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒(méi)有單獨(dú)的地址空間,一

個(gè)線程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時(shí)

,耗費(fèi)資源較大,效率要差一些。但對(duì)于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作

,只能用線程,不能用進(jìn)程。

60. ios 平臺(tái)怎么做數(shù)據(jù)的持久化?coredata 和sqlite有無(wú)必然聯(lián)系?coredata是一個(gè)

關(guān)系型數(shù)據(jù)庫(kù)嗎?

iOS 中可以有四種持久化數(shù)據(jù)的方式:屬性列表、對(duì)象歸檔、 SQLite3 和 Core Data; core

data 可以使你以圖形界面的方式快速的定義 app 的數(shù)據(jù)模型,同時(shí)在你的代碼中容易獲取到

它。 coredata 提供了基礎(chǔ)結(jié)構(gòu)去處理常用的功能,例如保存,恢復(fù),撤銷(xiāo)和重做,允許你在

app 中繼續(xù)創(chuàng)建新的任務(wù)。在使用 core data 的時(shí)候,你不用安裝額外的數(shù)據(jù)庫(kù)系統(tǒng),因?yàn)?/p>

core data 使用內(nèi)置的 sqlite 數(shù)據(jù)庫(kù)。 core data 將你 app 的模型層放入到一組定義在內(nèi)存

中的數(shù)據(jù)對(duì)象。 coredata 會(huì)追蹤這些對(duì)象的改變,同時(shí)可以根據(jù)需要做相反的改變,例如用

戶執(zhí)行撤銷(xiāo)命令。當(dāng) core data 在對(duì)你 app 數(shù)據(jù)的改變進(jìn)行保存的時(shí)候, core data 會(huì)把這

些數(shù)據(jù)歸檔,并永久性保存。 mac os x 中sqlite 庫(kù),它是一個(gè)輕量級(jí)功能強(qiáng)大的關(guān)系數(shù)據(jù)引

擎,也很容易嵌入到應(yīng)用程序??梢栽诙鄠€(gè)平臺(tái)使用, sqlite 是一個(gè)輕量級(jí)的嵌入式 sql 數(shù)

據(jù)庫(kù)編程。與 core data 框架不同的是, sqlite 是使用程序式的, sql 的主要的 API 來(lái)直接

操作數(shù)據(jù)表。 Core Data 不是一個(gè)關(guān)系型數(shù)據(jù)庫(kù),也不是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng) (RDBMS)

。雖然 Core Dta 支持SQLite 作為一種存儲(chǔ)類(lèi)型,但它不能使用任意的 SQLite 數(shù)據(jù)庫(kù)。 Cor

e Data 在使用的過(guò)程種自己創(chuàng)建這個(gè)數(shù)據(jù)庫(kù)。 Core Data 支持對(duì)一、對(duì)多的關(guān)系。

61. obj-c 有多重繼承么? 如果沒(méi)有什么替代方法?

cocoa 中所有的類(lèi)都是NSObject 的子類(lèi),多繼承在這里是用protocol 委托代理來(lái)實(shí)

現(xiàn)的。你不用去考慮繁瑣的多繼承,虛基類(lèi)的概念。

62. obj-c 有私有方法么? 私有變量呢?

objective-c - 類(lèi)里面的方法只有兩種, 靜態(tài)方法和實(shí)例方法. 這似乎就不是完整的面向

對(duì)象了,按照OO的原則就是一個(gè)對(duì)象只暴露有用的東西. 如果沒(méi)有了私有方法的話, 對(duì)于

一些小范圍的代碼重用就不那么順手了. 在類(lèi)里面聲名一個(gè)私有方法

@interface Controller : NSObject { NSString *something; }+ (void)thisIsAStaticMethod;

- (void)thisIsAnInstanceMethod;

@end

@interface Controller (private) -

(void)thisIsAPrivateMethod;

@end

@private 可以用來(lái)修飾私有變量

在Objective‐C 中,所有實(shí)例變量默認(rèn)都是私有的,所有實(shí)例方法默認(rèn)都是公有的

63. 假定輸入的字符串中只包含字母和* 號(hào)。編寫(xiě)函數(shù)fun,功能是,除了中間和尾部的

*號(hào)外,

將字符串中其他* 號(hào)全部刪除。編寫(xiě)時(shí),不用c的其他函數(shù)。

例:*****A*BC*DEF*G****

void fun (char *a)

{

int j=0;

char *p=a;

while (*p==’*')p++;while (*p){

a[ j++]=*p;

p++;

}

a[ j]=0;

結(jié)果為:A*BC*DEF*G****

}

64. 截取字符串”20 |http://www.621life.com“ 中 ‘|’字符前面及后面的數(shù)據(jù)

,分別輸出它們(10分)。

NSString *str = “20|http://www.621life.com”;

NSRange range = [strrangeOfString:@"|"];

int location = range.location;

NSString *str1 = [strsubstringToIndex:location];

NSString *str2 = [str substringFromIndex:location+1];

65. 獲取項(xiàng)目根路徑,并在其下創(chuàng)建一個(gè)名稱(chēng)為userData 的目錄。(10分)。// 獲取根路徑

NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirect

ory,NSUserDomainMask,YES);

NSString *documentsDirectory = [paths objectAtIndex:];

// 創(chuàng)建文件系統(tǒng)管理器

NSFileManager *fileManager = [[NSFileManageralloc] init];

// 判斷userData 目錄是否存在

if(![fileManagerfileExistsAtPath:[NSStringstringWithFormat:@"%@/userData

",documentsDirectory]]) {

// 不存在, 創(chuàng)建一個(gè)userData目錄

[fileManagercreateDirectoryAtPath:[NSStringstringWithFormat:@"%@/userD

ata",documentsDirectory]withIntermediateDirectories:falseattributes:nilerro

r:nil];

}

66. tableView 的重用機(jī)制(10 分)?

UITableView 通過(guò)重用單元格來(lái)達(dá)到節(jié)省內(nèi)存的目的: 通過(guò)為每個(gè)單元格指定一個(gè)重用

標(biāo)識(shí)符(reuseIdentifier),即指定了單元格的種類(lèi),以及當(dāng)單元格滾出屏幕時(shí),允許恢復(fù)單

元格以便重用.對(duì)于不同種類(lèi)的單元格使用不同的ID,對(duì)于簡(jiǎn)單的表格,一個(gè)標(biāo)識(shí)符就夠了.

67. 這段代碼有什么問(wèn)題嗎@implementation Person

i. (void)setAge:(int)newAge{

self.age = newAge;

}

死循環(huán)

68. 用變量a 給出下面的定義

a)

b)

c)

一個(gè)整型

一個(gè)指向整型數(shù)的指針

一個(gè)指向指針的的指針,它指向的指針是指向一個(gè)整型數(shù)

d)

e)

f)

g)

一個(gè)有10 個(gè)整型數(shù)的數(shù)組

一個(gè)有10 個(gè)指針的數(shù)組,該指針是指向一個(gè)整型數(shù)的

一個(gè)指向有10 個(gè)整型數(shù)數(shù)組的指針

一個(gè)指向函數(shù)的指針,該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù)

一個(gè)有10 個(gè)指針的數(shù)組,該指針指向一個(gè)函數(shù),該函數(shù)有一個(gè)整型參數(shù)并返回一

個(gè)整型數(shù)

h)

a)

b)

c)

d)

e)

f)

g)

i)

int a;

int *a;

int **a;

int a[10]

int *a[10];

int (*a)[10];

int (*a)(int);

int (*a[10])(int);

69. 給定一個(gè)字符串,輸出本字符串中只出現(xiàn)一次并且最靠前的那個(gè)字符的位置?

比如”abaccddeeef” 則是b,輸出2

int find(char *_str){

char *p = _str;

inti = 1;

while (*p)

{

char *temp = _str;

while (*temp)

{

if ((*p ==*temp)&&(p != temp)){

break;

}

temp++;

if (*temp == 0) {

returni;

}

}

i++;

p++;

}

return-1;

}

#include

#include

#include

intfind_char(constchar* str)

{

staticintpos[256];

const unsigned char* p =(const unsigned char*)str;inti = 0;

if( (!str) || (!(*str)) )return -1;memset(pos,-1,sizeof(pos));

while(*p){

if(pos[*p] == -1){

pos[*p] = p-(const unsigned char*)str;

}else{

pos[*p] = -2;

}

p++;

}

for(i=0;i=0)returnpos[i];

}

return -1;

}

int main()

{

constchar* p =”abaccddeeef”;

intpos = find_char(p);

printf(“%d, it is’%c’\n”,pos,pos!=-1?p[pos]:’ ‘);p =”abcdefghijklmnopqrstuvwxyz “

“abcdefghijklmnopqrstuwxyz”;

pos = find_char(p);

printf(“%d, it is’%c’\n”,pos,pos!=-1?p[pos]:’ ‘);

return0;

}

70. objective-c 中的數(shù)字對(duì)象都有哪些,簡(jiǎn)述它們與基本數(shù)據(jù)類(lèi)型的區(qū)別是什么?

在OC 中NSNumber是數(shù)字對(duì)象,可以進(jìn)行拆裝箱操作!

// 將int 轉(zhuǎn)為NSNumber

NSNumber *num = [NSNumber numberWithInt:123];

// 得到一個(gè)int

inttestNum = [numintValue];

71. 用NSLog 函數(shù)輸出一個(gè)浮點(diǎn)類(lèi)型,結(jié)果四舍五入,并保留一位小數(shù)

NSLog(@”%0.1f”,4.4324);

72. objective-c 中的詞典對(duì)象、可變?cè)~典對(duì)象是哪個(gè),初始化一個(gè)含有兩個(gè)鍵值對(duì)的

可變?cè)~典對(duì)象,并動(dòng)態(tài)的添加和刪除一條記錄,輸出第一條記錄.

詞典N(xiāo)SDictionary ,可變?cè)~典N(xiāo)SMutableDictionary,

// 初始化一個(gè)可變?cè)~典,帶有2 個(gè)鍵值對(duì)

NSMutableDictionary *dic =[NSMutableDictionarydictionaryWithObjectsAn

dKeys:@"value1",@"key1",@"value2",@"key2",nil];

// 添加

[dicsetObject:@"value3"forKey:@"key3"];

// 刪除

[dicremoveObjectForKey:@"key3"];

// 獲取(按key 獲取)

[dicobjectForKey:@"key1"];

73. 獲取項(xiàng)目根路徑,并在其下創(chuàng)建一個(gè)名稱(chēng)為userData 的目錄。

// 獲取根路徑

NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirect

ory,NSUserDomainMask,YES);

NSString*documentsDirectory = [paths objectAtIndex:];

// 創(chuàng)建文件系統(tǒng)管理器

NSFileManager *fileManager= [[NSFileManageralloc] init];

// 判斷userData 目錄是否存在

if(![fileManagerfileExistsAtPath:[NSStringstringWithFormat:@"%@/userData

",documentsDirectory]]) {

// 不存在, 創(chuàng)建一個(gè)userData目錄

[fileManagercreateDirectoryAtPath:[NSStringstringWithFormat:@"%@/userD

ata",documentsDirectory]withIntermediateDirectories:falseattributes:nilerro

r:nil];

}

74. do-while 與 while-do 的區(qū)別?

do-while 先執(zhí)行循環(huán)體,然后判斷條件,如果條件判斷為ture ,則繼續(xù)執(zhí)行循環(huán)體,

如果判斷為false,則不執(zhí)行循環(huán)體

while-do 是先判斷條件是否正確,若正確則執(zhí)行循環(huán)體,若不正確則不執(zhí)行循環(huán)體。所以do-while 至少循環(huán)一次,而while-do有可能一次也不循環(huán)。

75. 用C 語(yǔ)言,求2到100內(nèi)的所有素?cái)?shù)和。

#includeintisPrime(int n)

{

inti;for(i=2;i*i<=n;i++)if(n%i==0)

return 0;

return 1;

}

int main()

{

inti,sum=0;for(i=2;i<100;i++)if( isPrime(i))sum+=i;printf(“%5d”,sum);return 0 ;

}

intisPrime(int n){

inti;

for(i=2;i<=n/2;i++)

{

if(n%i==0)

break;

// 求素?cái)?shù),這是最經(jīng)典的算法代碼。建議記住

}

if(i>n/2)

return1;

else

return0;

}

76.單件實(shí)例是什么(10分)。

Foundation 和 Application Kit 框架中的一些 類(lèi) 只允 許創(chuàng) 建 單 件 對(duì) 象,即 這 些 類(lèi) 在當(dāng)

前 進(jìn) 程中的唯一 實(shí) 例。 舉 例來(lái) 說(shuō) ,NSFileManager 和NSWorkspace 類(lèi) 在使用時(shí) 都是

基于 進(jìn) 程 進(jìn) 行 單 件 對(duì) 象的 實(shí) 例化。當(dāng)向 這 些 類(lèi)請(qǐng) 求 實(shí) 例的 時(shí) 候,它 們會(huì)向您 傳遞

單 一 實(shí) 例的一個(gè)引用,如果 該實(shí) 例 還 不存在, 則 首先 進(jìn) 行 實(shí) 例的分配 和初始化。 單

件 對(duì) 象充當(dāng)控制中心的角色, 負(fù)責(zé) 指引或 協(xié)調(diào)類(lèi) 的各種服 務(wù) 。如果 類(lèi) 在概念上只有一個(gè)

實(shí) 例(比如

NSWorkspace ),就 應(yīng)該產(chǎn) 生 一個(gè) 單 件 實(shí) 例,而不是多個(gè) 實(shí) 例;如果將來(lái)某一天可能有多個(gè) 實(shí) 例,您可以使用 單 件 實(shí) 例機(jī)制,而不是工廠方法或函數(shù)。

77.自動(dòng)釋放池是什么,如何工作。

當(dāng)您向一個(gè)對(duì)象發(fā)送一個(gè)autorelease 消息時(shí),Cocoa就會(huì)將該對(duì)象的一個(gè)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、Objective-C的類(lèi)可以多重繼承么?可以采用多個(gè)協(xié)議么?答:不可以多重繼承,可以采用多個(gè)協(xié)議。2、#im...
    亦晴工作室閱讀 691評(píng)論 0 0
  • 指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類(lèi)型。 運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,619評(píng)論 3 44
  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,656評(píng)論 30 472
  • 1.#import和#include的區(qū)別 @class?@class一般用于頭文件中需要聲明該類(lèi)的某個(gè)實(shí)例變量的...
    晚照清舟閱讀 344評(píng)論 0 0
  • 最近總是會(huì)因?yàn)閯e人的一句話一個(gè)眼神或者一個(gè)動(dòng)作影響自己的心情。 也許,是我的心態(tài)變了。變得不再像之前那樣什么事情都...
    x_彤彤?huà)?/span>閱讀 275評(píng)論 6 0

友情鏈接更多精彩內(nèi)容