1漠酿、iOS本地?cái)?shù)據(jù)存儲(chǔ)都有哪幾種方式?
2憔鬼、深拷貝和淺拷貝的理解?
3赫粥、什么是序列化和反序列化,可以用來做什么?如何在OC中實(shí)現(xiàn)復(fù)雜對象的存儲(chǔ)?
4观话、談?wù)勀銓Χ嗑€程開發(fā)的理解?ios中有幾種實(shí)現(xiàn)多線程的方法?
我有一個(gè)iOS免費(fèi)內(nèi)推交流群,群里有群員內(nèi)推越平,有面試交流频蛔,有技術(shù)討論灵迫,有需要的加群:637919808
群內(nèi)交流情況:
1、iOS本地?cái)?shù)據(jù)存儲(chǔ)都有哪幾種方式晦溪?
NSKeyedArchiver? ?
NSUserDefaults
Write寫入方式(plist文件瀑粥、txt文件等)
SQLite3
CoreData
(問題擴(kuò)展:什么情況下使用什么樣的數(shù)據(jù)存儲(chǔ))
(1)NSKeyedArchiver:采用歸檔的形式來保存數(shù)據(jù),數(shù)據(jù)對象需要遵守NSCoding協(xié)議三圆,對象對應(yīng)的類必須提供encodeWithCoder:和initWithCoder:方法狞换。缺點(diǎn):只能一次性歸檔保存以及一次性解壓。所以只能針對小量數(shù)據(jù)舟肉,對數(shù)據(jù)操作比較笨拙修噪,如果想改動(dòng)數(shù)據(jù)的某一小部分,需要解壓或歸檔整個(gè)數(shù)據(jù)路媚。
(2)NSUserDefaults:用來保存應(yīng)用程序設(shè)置和屬性黄琼、用戶保存的數(shù)據(jù)。用戶再次打開程序或開機(jī)后這些數(shù)據(jù)仍然存在磷籍。NSUserDefaults可以存儲(chǔ)的數(shù)據(jù)類型包括:NSData适荣、NSString、NSNumber院领、NSDate弛矛、NSArray、NSDictionary比然。缺點(diǎn):如果要存儲(chǔ)其他類型丈氓,需要轉(zhuǎn)換為前面的類型,才能用NSUserDefaults存儲(chǔ)强法。
(3)Write寫入方式:永久保存在磁盤中万俗。第一步:獲得文件即將保存的路徑:第二步:生成在該路徑下的文件:第三步:往文件中寫入數(shù)據(jù):最后:從文件中讀出數(shù)據(jù):
(4)SQLite:采用SQLite數(shù)據(jù)庫來存儲(chǔ)數(shù)據(jù)。SQLite作為一中小型數(shù)據(jù)庫饮怯,應(yīng)用ios中闰歪,跟前三種保存方式相比,相對比較復(fù)雜一些蓖墅。
(5)CoreData:系統(tǒng)自帶的數(shù)據(jù)庫存儲(chǔ)库倘。
2、深拷貝和淺拷貝的理解论矾?
對實(shí)例進(jìn)行深拷貝時(shí)當(dāng)前類需要實(shí)現(xiàn)NSCopying協(xié)議教翩。
淺拷貝是復(fù)制出來一個(gè)跟原對象相同地址的對象
深拷貝時(shí)復(fù)制一個(gè)跟源對象不同地址的對象 改變源對象對新對象沒有影響
3、什么是序列化和反序列化贪壳,可以用來做什么饱亿?如何在OC中實(shí)現(xiàn)復(fù)雜對象的存儲(chǔ)?
序列化是把對象轉(zhuǎn)化成字節(jié)序列的過程? 反序列化是把字節(jié)序列恢復(fù)成對象
將對象寫到文件或者數(shù)據(jù)庫里,并且能讀取出來
遵循NSCoding協(xié)議 實(shí)現(xiàn)復(fù)雜對象的存儲(chǔ) 實(shí)現(xiàn)該協(xié)議后可以對其進(jìn)行打包或解包彪笼,轉(zhuǎn)化成NSData
4钻注、談?wù)勀銓Χ嗑€程開發(fā)的理解?ios中有幾種實(shí)現(xiàn)多線程的方法杰扫?
好處:
(1)使用線程可以把占據(jù)時(shí)間長的程序中的任務(wù)放到后臺去處理
(2)用戶界面可以更加吸引人队寇,這樣比如用戶點(diǎn)擊了一個(gè)按鈕去觸發(fā)某些事件的處理,可以彈出一個(gè)進(jìn)度條來顯示處理的進(jìn)度
(3)程序的運(yùn)行速度可能加快
(4)在一些等待的任務(wù)實(shí)現(xiàn)上如用戶輸入章姓、文件讀寫和網(wǎng)絡(luò)收發(fā)數(shù)據(jù)等佳遣,線程就比較有用了。
缺點(diǎn):
(1)如果有大量的線程,會(huì)影響性能,因?yàn)椴僮飨到y(tǒng)需要在它們之間切換凡伊。
(2)更多的線程需要更多的內(nèi)存空間零渐。
(3)線程的中止需要考慮其對程序運(yùn)行的影響。
(4)通常塊模型數(shù)據(jù)是在多個(gè)線程間共享的系忙,需要防止線程死鎖情況的發(fā)生诵盼。
實(shí)現(xiàn)多線程的方法:
NSObject類方法
NSThread
NSOperation
GCD