1. 程式人生 > >IOS 之資料庫 的幾種方式

IOS 之資料庫 的幾種方式

在iOS開發過程中,不管是做什麼應用,都會碰到資料儲存的問題。將資料儲存到本地,能夠讓程式的執行更加 流暢,不會出現讓人厭惡的菊花形狀,使得使用者體驗更好。下面介紹⼀一下資料儲存的方式:

1.NSKeyedArchiver:採用歸檔的形式來儲存資料,該資料物件需要遵守NSCoding協議,並且該物件對應的類必須提 供encodeWithCoder:和initWithCoder:方法。前⼀一個方法告訴系統怎麼對物件進行編碼,而後⼀一個方法則是告訴系統怎 麼對物件進行解碼。例如對Possession物件歸檔儲存。

定義Possession:
@interface Possession:NSObject{//遵守NSCoding協議

NSString *name;//待歸檔型別 }

@implementation Possession -(void)encodeWithCoder:(NSCoder *)aCoder{

[aCoder encodeObject:name forKey:@"name"]; }

-(void)initWithCoder:(NSCoder *)aDecoder{
name=[[aDeCoder decodeObjectforKey:@"name"] retain];

}

2.歸檔操作: 如果對Possession物件allPossession歸檔儲存,只需要NSCoder子類NSKeyedArchiver的方法

 archiveRootObject:toFile:即可。

NSString *path = [self possessionArchivePath];
[NSKeyedArchiver archiveRootObject:allPossessions toFile: path ]
解壓操作: 同樣呼叫NSCoder子類NSKeyedArchiver的方法unarchiveRootObject:toFile: 即可 allPossessions = [[NSKeyedUnarchiver unarchiveObjectWithFile:path] retain];

缺點:歸檔的形式來儲存資料,只能⼀一次性歸檔儲存以及⼀一次性解壓。所以只能針對小量資料,而且對資料操作比較 笨拙,即如果想改動資料的某⼀一小部分,還是需要解壓整個資料或者歸檔整個資料。

 2.NSUserDefaults:用來儲存應用程式設定和屬性、使用者儲存的資料。使用者再次開啟程式或開機後這些資料仍然存 在。NSUserDefaults可以儲存的資料型別包括:NSData、NSString、NSNumber、NSDate、NSArray、 NSDictionary。如果要儲存其他型別,則需要轉換為前面的型別,才能用NSUserDefaults儲存。具體實現為:

儲存資料:

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; NSString *name [email protected]”default string“;
[defaults setObject:firstName forKey:@"name"];

//獲得UIImage例項
UIImage *image=[[UIImage alloc]initWithContentsOfFile:@"photo.jpg"];
NSData *imageData = UIImageJPEGRepresentation(image, 100);//UIImage物件轉換成NSData [defaults synchronize];//用synchronize方法把資料持久化到standardUserDefaults資料庫

讀取資料:

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
NSString *name = [defaults objectForKey:@"name"];//根據鍵值取出name
NSData *imageData = [defaults dataForKey:@"image"];
UIImage *Image = [UIImage imageWithData:imageData];//NSData轉換為UIImage

3. Write寫入方式:永久儲存在磁碟中。具體方法為:
第⼀一步:獲得檔案即將儲存的路徑:
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);//使用C函式NSSearchPathForDirectoriesInDomains來獲得沙盒中目錄的全路

徑。該函式有三個引數,目錄型別、he domain mask、布林值。其中布林值表示是否需要通過?~擴充套件路徑。 而且第⼀一個引數是不變的,即為NSSearchPathDirectory 。在IOS中後兩個引數也是不變的,即為:

相關推薦

iOS儲存的方式

1.寫檔案 NSData *dat = [[NSDataalloc]initWithContentsOfURL:[NSURLURLWithString:imageUrl]]; NSString *fullPath = [[NSHomeDirectory() strin

IOS 資料庫方式

在iOS開發過程中,不管是做什麼應用,都會碰到資料儲存的問題。將資料儲存到本地,能夠讓程式的執行更加 流暢,不會出現讓人厭惡的菊花形狀,使得使用者體驗更好。下面介紹⼀一下資料儲存的方式: 1.NSKeyedArchiver:採用歸檔的形式來儲存資料,該資料物件需要遵守NSCoding協議,並且該物件對應

iOS代碼加密的方式

red .sh 最簡 應用安全 adr 變量名 尋找 技術分享 混淆 眾所周知的是大部分iOS代碼一般不會做加密加固,因為iOS APP一般是通過AppStore發布的,而且蘋果的系統難以攻破,所以在iOS裏做代碼加固一般是一件出力不討好的事情。萬事皆有例外,不管iOS、a

設計模式單例模式【內附物件例項化方式、實現執行緒安全方式

繼續來複習常用的設計模式-單例模式,順便回憶一下執行緒安全的幾種實現方式。 一、什麼是單例模式 單例模式,簡單常用的一種設計模式,也很好的體現了程式碼控制物件在記憶體數量的一種方式,主要分2種實現方式: ①餓漢式,執行緒安全 ②懶漢式,執行緒不安全(新增鎖機制,可以實現執行緒安全)

iOS關於載入圖片的方式選擇

最近在開發過程中遇到一些效能優化的東西,這次來說說關於圖片載入的效能優化和選擇。 大家都知道建立UIImage常用以下幾種方式 + (nullable UIImage *)imageNamed:(NSString *)name; // load from main bundle

web前端跨域的方式

一、什麼是跨域 JavaScript出於安全方面的考慮,不允許跨域呼叫其他頁面的物件。那什麼是跨域呢,簡單地理解就是因為JavaScript同源策略的限制,a.com域名下的js無法操作b.com或是c.a.com域名下的物件。 當協議、子域名、主域名、埠號中任意一個不相同時,都算作不

資料庫設計規範化--------正規化詳解

資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘資訊。  

iOS 連線外設的方式

    聯絡人:石虎 QQ:1224614774   暱稱: 嗡嘛呢叭咪哄                         &

react傳遞資料的方式props傳值、路由傳值、狀態提升、redux、context

react之傳遞資料的幾種方式 1、父子傳值 父傳值:<子的標籤 value={'aaa'} index={'bbb'}></子的標籤> 子接值:<li key={this.props.index}>{this.props.value}</li>

清空資料庫表結構的方式

一、SQL中的語法    1、drop table 表名稱                         eg: drop

Vue指令v-for遍歷陣列,json物件的方式

定義資料:   <script>     new Vue({         el:"#test",         data:{      

iOS中保證執行緒安全的方式與效能對比

一、前言 前段時間看了幾個開源專案,發現他們保持執行緒同步的方式各不相同,有@synchronized、NSLock、dispatch_semaphore、NSCondition、pthread_mutex、OSSpinLock。後來網上查了一下,發現他們的實現機制各不相同,效能也各不一

php連線資料庫方式

  <?php $name = $_POST["u_name"]; //flag1:$_POST["u_name"] $pass = $_POST["u_pass"]; $sql2 = "select * from admin where username = ? and pas

iOS 實現圖片圓角的方式

第一種方法:通過設定layer的屬性 最簡單的一種,但是很影響效能,一般在正常的開發中使用很少. UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 10

python學習網站的編寫(HTML,CSS,JS)(二十一)----------事件(例如點選事件等)及繫結事件的方式

事件:什麼叫做事件呢,就是我們在頁面中的一些滑鼠和鍵盤操作,比如onclick就是點選事件,然後我們將介紹幾種繫結事件的方式。 1.在標籤中繫結 <div onclick="fuc()"></div> <script> fun

登入mysql資料庫方式

登入mysql資料庫的幾種方式 第1種 (通過mysql自帶的客戶端,MySQL 5.5 Command Line Client) 不推薦這種方式 注意:這種登入方式,只適用於root使用者,不夠靈活!(只適合於root使用者登入,只限於root使用者,以後我們可

iOS效能檢測Instrunments - 常用工具簡單介紹

Instrunments: 沒錯,就是這貨,很多人平時開發可能不一定會用到這個,但我要說的是,學會使用它,會讓你加分不少哦 先來一張一覽圖: 兩種方式都行。 2、今天主要介紹一下我常用的3種:Core Animation 、Leaks、Time Profiler

java在普通程式碼中獲取bean的方式

普通程式碼中獲取bean的幾種方式 最近在專案中,因程式碼模式要求,需要在普通類中去主動呼叫bean例項,經過參考分析,做如下的整理。 在初始化時儲存ApplicationContext物件 通過Spring提供的utils類獲取ApplicationC

python實戰str引入輸出方式

字串取變數名 #多行字串註釋符號:'''str''' #單行字元的註釋符號: 'str' or "str"   variable_name = ‘xx’ #'''+ variable_name +'''方式獲取變數(只能在多行註釋下使用,非常不方便) name ='

Python匯入模組的方式和import本質

匯入模組方法 import module_xxx  #匯入模組 import module1_ xxx, module2_ xxx  #匯入多個模組 from moudule_ xxx import say_hello #調取模組的指定一個功能(函式或類) fro