欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

iOS學(xué)習(xí)筆記 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們在追求其視覺表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏壧峁┍憬莸闹С郑?

您當(dāng)前位置>首頁 » 新聞資訊 » 技術(shù)分享 >

iOS學(xué)習(xí)筆記

發(fā)表時(shí)間:2020-10-19

發(fā)布人:葵宇科技

瀏覽次數(shù):44


       在iOS進(jìn)修過程中,有時(shí)刻須要保持用戶數(shù)據(jù),比如登錄信息、用戶的設(shè)制揭捉項(xiàng)等,這時(shí)刻就須要進(jìn)修數(shù)據(jù)持久化操作,本節(jié)重要進(jìn)修iOS數(shù)據(jù)持久化相干的常識。
       數(shù)據(jù)持久化的方法有四種:
              1).寫入plist文件(屬性列表)
              2).偏好設(shè)置 
              3).歸檔(NSKeyedArchiver)
              4).NSData
        下面分別舉例解釋四種方法的實(shí)用處合以及用法。
        1. 寫入plist文件(屬性列表)
        1.1 plist可以存儲哪些數(shù)據(jù)
              屬性列表是一種XML格式的文件,拓展名為plist
              如不雅對象是NSString、NSDictionary、NSArray、NSData、NSNumber等類型,就可以應(yīng)用writeToFile:atomically:辦法直接將對象寫到屬性列表文件中。
              因?yàn)閜list文件的root只有Array和Dictionary兩種類型,所以最好只保持它們對應(yīng)數(shù)據(jù)類型的數(shù)據(jù)。
              [img]http://img.blog.csdn.net/20150106121855385?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnlibG9n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
             比如當(dāng)你存儲字符串類型的數(shù)據(jù)的時(shí)刻,Type就為空了。
            [img]http://img.blog.csdn.net/20150106121934375?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnlibG9n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
           1.2 若何存儲
           
	#pragma mark - 存儲數(shù)據(jù)
	
	- (IBAction)btnSaveData_Click:(UIButton *)sender
	{
	    NSString *str = @"hello";
	    NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"test_str.plist"];
	    BOOL result = [str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
	    if (result)
	    {
	        NSLog(@"存儲數(shù)據(jù)成功");
	    }
	    else
	    {
	        NSLog(@"存儲數(shù)據(jù)掉?。?quot;);
	    }
	}

             法度榜樣運(yùn)行結(jié)不雅如下:
             [img]http://img.blog.csdn.net/20150106122018484?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnlibG9n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
主動(dòng)生成的文件:
 [img]http://img.blog.csdn.net/20150106122114225?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnlibG9n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
          
     留意:plist不克不及存儲自定義對象類型!
    
	<span style="color:#000000;">#pragma mark - 存儲數(shù)據(jù)
	
	- (IBAction)btnSaveData_Click:(UIButton *)sender
	{
	    // 文件的沙河路徑
	    NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"test_obj.plist"];
	    // 創(chuàng)建Student對象
	    CYStudent *stu = [[CYStudent alloc]init];
	    stu.name = @"zhangsan";
	    stu.age = 18;
	    NSArray *arrTmp = @[stu];
	    BOOL result = [arrTmp writeToFile:filePath atomically:YES];
	    if (result)
	    {
	        NSLog(@"存儲數(shù)據(jù)成功");
	    }
	    else
	    {
	        NSLog(@"存儲數(shù)據(jù)掉??!");
	    }
	}</span>
     法度榜樣運(yùn)行結(jié)不雅如下:
   [img]http://img.blog.csdn.net/20150106122201493?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnlibG9n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

      1.3 plist文件的存儲與攫取過程
      [img]http://img.blog.csdn.net/20150106122241289?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnlibG9n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center  


    2. 偏好設(shè)置
    2.1 應(yīng)用處景
        很多iOS應(yīng)用都支撐偏好設(shè)置,比如保存用戶名、暗碼、字體大年夜小等設(shè)置,iOS供給了一套標(biāo)準(zhǔn)的解決籌劃來為應(yīng)用參加偏好設(shè)置功能
    每個(gè)應(yīng)用都有個(gè)NSUserDefaults實(shí)例,經(jīng)由過程它來存取偏好設(shè)置。比如,保存用戶名、字體大年夜小、是否主動(dòng)登錄。
    2.2 若何應(yīng)用
    登錄成功后保存數(shù)據(jù):
   
    [[NSUserDefaults standardUserDefaults]setObject:self.txtAccount.text forKey:@"account"];
    [[NSUserDefaults standardUserDefaults]setObject:self.txtPWD.text forKey:@"pwd"];
    [[NSUserDefaults standardUserDefaults]setBool:self.swchRememberPWD.on forKey:@"isRememberPWD"];
    [[NSUserDefaults standardUserDefaults]setBool:self.swchAutoLogin.on forKey:@"isAutoLogin"];

        再次登錄時(shí)攫取數(shù)據(jù):
        // 獲取偏好設(shè)置中的數(shù)據(jù)
    self.txtAccount.text = [[NSUserDefaults standardUserDefaults]objectForKey:@"account"];
    self.swchAutoLogin.on = [[NSUserDefaults standardUserDefaults]boolForKey:@"isAutoLogin"];
    self.swchRememberPWD.on = [[NSUserDefaults standardUserDefaults]boolForKey:@"isRememberPWD"];
    self.txtPWD.text = [[NSUserDefaults standardUserDefaults]objectForKey:@"pwd"];

        留意:UserDefaults設(shè)置數(shù)據(jù)時(shí),不是急速寫入,而是根據(jù)時(shí)光戳準(zhǔn)時(shí)地把緩存中的數(shù)據(jù)寫入本地磁盤。所聲調(diào)用了set辦法之后數(shù)據(jù)有可能還沒有寫入磁盤應(yīng)用法度榜樣就終止了。出現(xiàn)以上問題,可以經(jīng)由過程調(diào)用synchornize辦法強(qiáng)迫寫入
    [defaults synchornize];

       3. 歸檔(NSKeyedArchiver)
       3.1 應(yīng)用處合
             如不雅對象是NSString、NSDictionary、NSArray、NSData、NSNumber等類型,可以直接用NSKeyedArchiver進(jìn)行歸檔和恢復(fù)
     不是所有的對象都可以直接用這種辦法進(jìn)行歸檔,只有遵守了NSCoding協(xié)定的對象才可以
     NSCoding協(xié)定有2個(gè)辦法:
       1)encodeWithCoder:
        每次歸檔對象時(shí),都邑調(diào)用這個(gè)辦法。一般在這個(gè)辦法瑯綾擎指定若何歸檔對象中的每個(gè)實(shí)例變量,可以應(yīng)用encodeObject:forKey:辦法歸檔實(shí)例變量
       2)initWithCoder:
        每次大年夜文件中恢復(fù)(解碼)對象時(shí),都邑調(diào)用這個(gè)辦法。一般在這個(gè)辦法瑯綾擎指定若何解碼文件中的數(shù)據(jù)為對象的實(shí)例變量,可以應(yīng)用decodeObject:forKey辦法解碼實(shí)例變量
       3.2 若何應(yīng)用
       1> 自定義實(shí)體類
    
   @interface CYContact : NSObject

   /** 姓名 */
   @property (nonatomic,copy) NSString *name;

   /** 德律風(fēng) */
   @property (nonatomic,copy) NSString *phone;

   @end

      2> 實(shí)現(xiàn)NSCoding協(xié)定辦法
   
   #pragma mark - NSCoding協(xié)定辦法
   /*
   Encodes the receiverusing a given archiver
   經(jīng)由過程一個(gè)給定的archiver把消息接收者進(jìn)行編碼。
   當(dāng)接收到encodeObject消息的時(shí)刻,類終端encodeWithCoder辦法被調(diào)用。
   */
   - (void)encodeWithCoder:(NSCoder *)aCoder
   {
       [aCoder encodeObject:_name forKey:CYNameKey];
       [aCoder encodeObject:_phone forKey:CYPhoneKey];
   }

   /*
   Returns an objectinitialized from data in a given unarchiver. (required)
   年腋荷瑣給定unarchiver的數(shù)據(jù)中返回一個(gè)初始化對象。
   */
   - (id)initWithCoder:(NSCoder *)aDecoder
   {
       if (self = [super init])
       {
           _name = [aDecoder decodeObjectForKey:CYNameKey];
           _phone = [aDecoder decodeObjectForKey:CYPhoneKey];
       }
   return self;
   }

   /*
   Returnsa new instance that’s a copy of the receiver
   返回消息接收者的一個(gè)復(fù)制的新實(shí)例。
   */
   - (id)copyWithZone:(NSZone *)zone
   {
       CYContact *copy =  
      3> 歸檔
   [NSKeyedArchiver archiveRootObject:self.contacts toFile:CYFilePath];

      4> 接檔
   self.contacts = [NSKeyedUnarchiver unarchiveObjectWithFile:CYFilePath];

      5> 留意點(diǎn)
      如不雅父類也遵守了NSCoding協(xié)定,請留意:
     ? 應(yīng)當(dāng)在encodeWithCoder:辦法中加上一句[super encodeWithCode:encode];確保持續(xù)的實(shí)例變量也能被編碼,即也能被歸檔
     ? 應(yīng)當(dāng)在initWithCoder:辦法中加上一句self = [super initWithCoder:decoder];確保持續(xù)的實(shí)例變量也能被解碼,即也能被恢復(fù)

     4. NSData
     4.1 應(yīng)用處合
     應(yīng)用archiveRootObject:toFile:辦法可以將一個(gè)對象直接寫入到一個(gè)文件中,但有時(shí)刻可能想將多個(gè)對象寫入到同一個(gè)文件中,那么   就要應(yīng)用NSData來進(jìn)行歸檔對象
     NSData可認(rèn)為一些數(shù)據(jù)供給臨時(shí)存儲空間,以便隨后寫入文件,或者存放大年夜磁盤攫取的文件內(nèi)容。可以應(yīng)用[NSMutableData data]創(chuàng)建  可變數(shù)據(jù)空間
     [img]http://img.blog.csdn.net/20150106122333393?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnlibG9n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

     
      注:黑色箭頭表示將對象歸檔到文件中,紅色箭頭表示大年夜文件中恢復(fù)對象
      4.2 若何應(yīng)用
     
	#pragma mark - 存儲數(shù)據(jù)
	
	- (IBAction)btnSaveData_Click:(UIButton *)sender
	{
	    // NSData-歸檔2個(gè)Person對象到同一文件中
	    // 實(shí)例化對象
	    CYStudent *stu1 = [CYStudent studentWithName:@"zhangsan" age:18];
	    CYStudent *stu2 = [CYStudent studentWithName:@"lisi" age:20];
	    // 新建一塊可變數(shù)據(jù)區(qū)
	    NSMutableData *data = [NSMutableData data];
	    // 將數(shù)據(jù)區(qū)連接到一個(gè)NSKeyedArchiver對象
	    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
	    // 開端存檔對象,存檔的數(shù)據(jù)都邑存儲到NSMutableData中
	    [archiver encodeObject:stu1 forKey:@"stu1"];
	    [archiver encodeObject:stu2 forKey:@"stu2"];
	    // 存檔完畢(必定要調(diào)用這個(gè)辦法)
	    [archiver finishEncoding];
	    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"datas.data"];
	    // 將存檔的數(shù)據(jù)寫入文件
	    BOOL result = [data writeToFile:path atomically:YES];
	
	    if (result)
	    {
	        NSLog(@"存儲數(shù)據(jù)成功");
	    }
	    else
	    {
	        NSLog(@"存儲數(shù)據(jù)掉?。?quot;);
	    }
	}
	
	#pragma mark - 攫取數(shù)據(jù)
	
	- (IBAction)btnReadData_Click:(UIButton *)sender
	{
	    // NSData-大年夜同一文件中恢復(fù)2個(gè)Person對象
	    // 大年夜文件中攫取數(shù)據(jù)
	    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"datas.data"];
	    NSData *data = [NSData dataWithContentsOfFile:path];
	    // 根據(jù)數(shù)據(jù),解析成一個(gè)NSKeyedUnarchiver對象
	    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
	    CYStudent *stu1 = [unarchiver decodeObjectForKey:@"stu1"];
	    CYStudent *stu2 = [unarchiver decodeObjectForKey:@"stu2"];
	    // 恢復(fù)完畢
	    [unarchiver finishDecoding];
	    NSLog(@"%@",stu1);
	    NSLog(@"%@",stu2);
	}
	
	#pragma mark - 應(yīng)用歸檔實(shí)現(xiàn)深復(fù)制
	
	- (IBAction)btnDeepCopy_Click:(UIButton *)sender
	{
	    // 比如對一個(gè)CYStudent對象進(jìn)行深復(fù)制
	    // 臨時(shí)存儲stu1的數(shù)據(jù)
	    CYStudent *stu1 = [CYStudent studentWithName:@"zhangsan" age:18];
	    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:stu1];
	    // 解析data,生成一個(gè)新的Person對象
	    CYStudent *stu2 = [NSKeyedUnarchiver unarchiveObjectWithData:data];
	    // 分別打印內(nèi)存地址
	    NSLog(@"stu1:%p", stu1); // stu1:0x7bdb32b0
	    NSLog(@"stu2:%p", stu2); // stu2:0x7bdb6b80
	}


































        

相關(guān)案例查看更多