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è)