一. 關(guān)鍵字volatile有什么含義熟妓?并給出三個(gè)不同例子
一個(gè)定義為volatile的變量是說(shuō)這變量可能會(huì)被意想不到地改變,這樣,編譯器就不會(huì)去假設(shè)這個(gè)變量的值了.
精確地說(shuō)就是,優(yōu)化器在用到這個(gè)變量時(shí)必須每次都小心地重新讀取這個(gè)變量的值,而不是使用保存在寄存器里的備份.
下面是volatile變量的幾個(gè)例子:
- 并行設(shè)備的硬件寄存器(如:狀態(tài)寄存器)
- 一個(gè)中斷服務(wù)子程序中會(huì)訪問(wèn)到的非自動(dòng)變量(Non-automatic variables)
- 多線程應(yīng)用中被幾個(gè)任務(wù)共享的變量
二.對(duì)象是什么時(shí)候被release的?
引用計(jì)數(shù)為0時(shí). autorelease實(shí)際上只是把對(duì)release的調(diào)用延遲了,對(duì)于每一個(gè)Autorelease,系統(tǒng)只是把該Object放入了當(dāng)前的 Autoreleasepool中,當(dāng)該pool被釋放時(shí)拄显,該pool中的所有Object會(huì)被調(diào)用Release.對(duì)于每一個(gè)Runloop,系統(tǒng)會(huì)隱式創(chuàng)建一個(gè)Autoreleasepool,這樣所有的release pool會(huì)構(gòu)成一個(gè)象CallStack一樣的一個(gè)棧式結(jié)構(gòu),每一個(gè)Runloop結(jié)束時(shí),當(dāng)前棧頂?shù)腁utoreleasepool會(huì)被銷毀,這樣這 個(gè)pool里的每個(gè)Object(就是autorelease的對(duì)象)會(huì)被release.那什么是一個(gè)Runloop呢穷娱?一個(gè)UI事件,Timercall, delegate call,都會(huì)是一個(gè)新的Runloop
三26唾糯、iOS有沒(méi)有垃圾回收機(jī)制嬉荆?
iOS在Objective-c 2.0之后腊徙,也提供了垃圾回收機(jī)制.但是在iOS移動(dòng)終端設(shè)備中,并不支持垃圾回收機(jī)制.
因此.iPhone并不能對(duì)內(nèi)存進(jìn)行自動(dòng)垃圾回收處理(autorelease).因此需要注意 垃圾回收機(jī)制并不是ARC,ARC也是需要管理內(nèi)存的,只不過(guò)是隱式的管理內(nèi)存,編譯器會(huì)再適當(dāng)?shù)牡胤阶詣?dòng)插入retain,release和 autorelease消息.
四. ViewController的didReceiveMemoryWarning是在什么時(shí)候調(diào)用的屋摔?默認(rèn)的操作是什么烁设?
當(dāng)程序接到內(nèi)存警告時(shí)View Controller將會(huì)收到這個(gè)消息:didReceiveMemoryWarning從iOS3.0開(kāi)始,不需要重載這個(gè)函數(shù)钓试,把釋放內(nèi)存的代碼放到viewDidUnload中去装黑。這個(gè)函數(shù)的默認(rèn)實(shí)現(xiàn)是:檢查controller是否可以安全地釋放它的view(這里加粗的view指的是controller的view屬性),比如view本身沒(méi)有superview并且可以被很容易地重建(從nib或者loadView函數(shù))亚侠。如果view可以被釋放曹体,那么這個(gè)函數(shù)釋放view并調(diào)用viewDidUnload。你可以重載這個(gè)函數(shù)來(lái)釋放controller中使用的其他內(nèi)存硝烂。但要記得調(diào)用這個(gè)函數(shù)的super實(shí)現(xiàn)來(lái)允許父類(一般是UIVIewController)釋放view箕别。如果你的ViewController保存著view的子view的引用,那么,在早期的iOS版本中串稀,你應(yīng)該在這個(gè)函數(shù)中來(lái)釋放這些引用除抛。而在iOS3.0或更高版本中,你應(yīng)該在viewDidUnload中釋放這些引用母截。
五. delegate和notification區(qū)別到忽,分別在什么情況下使用
delegate針對(duì)one-to-one關(guān)系,并且receiver可以返回值給sender;
notification 可以針對(duì)one-to-one/many/none,receiver無(wú)返回值給sender
六. 內(nèi)存管理 Autorelease retain copy assign的set方法和含義
- 初始化對(duì)象(alloc/init)的對(duì)象 你需要釋放(release)它 例如NSMutableArray aArray = [[NSArray alloc] init];后,需要[aArray release];
- 你retain或copy的,你需要釋放它清寇。例如:
[aArray retain]后,需要[aArray release]; - 被傳遞(assign)的對(duì)象,你需要斟酌的retain和release.例如:
obj2 = [[obj1 someMethod] autorelease];對(duì)象2接受對(duì)象1的一個(gè)自動(dòng)釋放的值,或傳遞一個(gè)基本數(shù)據(jù)類型(NSInteger,NSString)時(shí):你或希望將對(duì)象2進(jìn)行retain,以防止它在被使用之前就被自動(dòng)釋放掉.但是在retain后,一點(diǎn)要在適當(dāng)?shù)臅r(shí)候進(jìn)行釋放.
七. 談?wù)勀銓?duì)索引計(jì)數(shù)的理解
retain值 = 索引計(jì)數(shù)(ReferenceCounting) NSArray對(duì)象會(huì)retain(retain值加一)任何數(shù)組中的對(duì)象.當(dāng)NSArray被卸載(dealloc)的時(shí)候,所有數(shù)組中的對(duì)象會(huì)被執(zhí)行一次釋放(retain值減一).不僅僅是NSArray,任何收集類 (CollectionClasses) 都執(zhí)行類似操作.例如NSDictionary,甚至UINavigationController.Alloc/init建立的對(duì)象,索引計(jì)數(shù)為1.無(wú)需將其再次retain[NSArray array]和[NSDate date]等“方法”建立一個(gè)索引計(jì)數(shù)為1的對(duì)象,但是也是一個(gè)自動(dòng)釋放對(duì)象所以是本地臨時(shí)對(duì)象,那么無(wú)所謂了.如果是打算在全Class中使用的變量(iVar),則必須retain它.缺省的類方法返回值都被執(zhí)行了“自動(dòng)釋放”方法.(如上中的NSArray)在類中的卸載方法“dealloc”中,release所有未被平衡的NS對(duì)象.(所有未被autorelease,而retain值為1的)
八. 異步請(qǐng)求最大數(shù)目是多大,為什么只能這么多
這個(gè)數(shù)量是跟cpu有關(guān)的,并發(fā)性取決于cpu核數(shù),每個(gè)核只能同時(shí)處理一個(gè)任務(wù).4核cpu理論上可以并發(fā)處理4個(gè)任務(wù),如果按http來(lái)算就是4個(gè)請(qǐng)求,但是cpu是搶占式資源,所以一般來(lái)說(shuō)并發(fā)量是要根據(jù)任務(wù)的 耗時(shí)和cpu的繁忙度來(lái)計(jì)算4個(gè)左右只是個(gè)經(jīng)驗(yàn)值你開(kāi)10個(gè)短耗時(shí)的任務(wù)和幾個(gè)長(zhǎng)耗時(shí)任務(wù)的效率是不同的- -..一般來(lái)說(shuō)估算這個(gè)量的最大效率估算公示是cpu核數(shù)*2-1喘漏,這個(gè)公式是當(dāng)時(shí)對(duì)集群進(jìn)行壓測(cè)得到的結(jié)論.cpu搶占時(shí)間跟任務(wù)時(shí)長(zhǎng)…開(kāi)啟這個(gè)數(shù)量的 線程可以最大化的榨干cpu一個(gè)道理。cpu不可能都被搶去做connection.iOS是cpu密集型的消耗?华烟。這個(gè)大概知道就行了,也不會(huì)有人特 別在意吧…cpu核數(shù)2-1那個(gè)是做淘寶的java團(tuán)隊(duì)壓測(cè)得到的線程最優(yōu)數(shù)?翩迈,放在iOS上也多少適用…一般來(lái)說(shuō)不超過(guò)這個(gè)量就好,線程不是起的越多越好,線程數(shù)就是…cpu來(lái)決定的
九. 什么是NSManagedObject模型
NSManagedObject是NSObject的子類 ,也是coredata的重要組成部分,它是一個(gè)通用的類,實(shí)現(xiàn)了core data 模型層所需的基本功能,用戶可通過(guò)子類化NSManagedObject,建立自己的數(shù)據(jù)模型
十.簡(jiǎn)述NULL nil NIL NSNull的區(qū)別
- NULL是c語(yǔ)言中的空指針.
- nil是OC中指向空對(duì)象的指針
- Nil是OC指向類的空指針
- NSNull是數(shù)字或字典集合對(duì)象中表示空值對(duì)象.