溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Objective -C NSDate、Category   、Extension、Protocol

發(fā)布時(shí)間:2020-07-13 04:32:09 來(lái)源:網(wǎng)絡(luò) 閱讀:629 作者:Im劉亞芳 欄目:開(kāi)發(fā)技術(shù)

NSDate的使用

  • NSDate是Cocoa中用于處理日期和時(shí)間的基礎(chǔ)類,封裝類某一給定的時(shí)刻,具體的日期,時(shí)間和時(shí)區(qū)

  • 使用+date方法獲取當(dāng)前日期和時(shí)間

  • 例如  :NSDate*nowDate = [NSDate date];

  • 注意,,NSLog(@“%@”,nowDate); 無(wú)論你是哪個(gè)時(shí)區(qū)的時(shí)間,打印時(shí)間,打印時(shí)總是打印對(duì)應(yīng)的0時(shí)區(qū)時(shí)間

NSTimeinterval


  • NSTimeInterval(即double類型) 用以表示以秒為單位的時(shí)間間隔

  • 可以使用-initWithTimeIntervalSinceNow:方法傳入一個(gè)NSTimeInterval參數(shù),創(chuàng)建一個(gè) NSDate對(duì)象

  • 例如:NSDate * tomorrowDate = [[NSDate alloc] initWithTimeIntervalSinceNow:24*60 * 60];

  • NSDate * yesterdayDate = [[NSDate alloc] initWithTimeIntervalSinceNow:-1 * 24*60 *60];


  • 取兩個(gè)時(shí)間對(duì)象的間隔:NSTimeinterval = [tomorrowDate timeIntervalSinceDate:yesterdayDate]; 


NSDateFormatter的使用

1.

  • NSDateFormatteriOS中的日期格式類,主要的功能是實(shí)現(xiàn) 代表日期的NSString

  • SDate的互轉(zhuǎn),提供了系統(tǒng)預(yù)置的字符串格式,還允許用戶自定義字符串格式。 我們可以設(shè)置時(shí)區(qū)、月的名稱、紀(jì)元的符號(hào)、local、calender、AM/PMweekday的符號(hào)

  • 常見(jiàn)的時(shí)間格式化字符串有以下一些:年、 年中的月份 、月份中的天數(shù)、 

  • 中的小時(shí)數(shù)(0-23)、 h am/pm 中的小時(shí)數(shù)(1-12)、小時(shí)中的分鐘數(shù) 、分鐘中的秒數(shù)

  • 指定日期格式: NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

2.

  • NSDateFormatter可以將日期轉(zhuǎn)化為相對(duì)應(yīng)的字符串,同樣可以將字串轉(zhuǎn)化為相對(duì)應(yīng)的日期。

  • 日期轉(zhuǎn)化為字符串: NSDateFormatter*formatter =NSDateFormatter alloc] init];

  • [formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];

  • NSString *dateString=[formatter stringFromDate: [NSDate date]]; 

3.


  • 時(shí)間字符串轉(zhuǎn)化為相對(duì)應(yīng)的日期:NSDateFormatter * formatter =[[NSDateFormatter alloc] init];

  • [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

  • NSString * dateStr = @”2008-08-08 20:08:08”; NSDate * date = [formatter dateFromString:dateStr]; 


類目Category   

  • Category也叫分類或類目

  • 主要作用是為 沒(méi)有源代碼 的類添加方法。

  • 通過(guò)Category添加的方法會(huì)成為原類的一部分。從而達(dá)到擴(kuò)展一 類的功能。 

Category的定義

  • 新建文件

  • 選擇Objective-C Category模板 

  • 填寫類名和分類名

  •  .h文件添加方法聲明

  • .m添加方法實(shí)現(xiàn) 

  • 需要使用的地方進(jìn)行調(diào)用。

Category的聲明

  • NSString+SayHi.h文件 

  • @interface NSString (SayHi)

  • - (void)hi; 

  • @end 

Category的實(shí)現(xiàn)

  • NSString+SayHi.m文件 

  • #import NSString+SayHi.h

  • @implementation NSString(SayHi)

  •  - (void)hi{

  • NSLog(@這是通過(guò)categoryNSString添加的hi方法);

  •  }

  • @end

Category與子類的區(qū)別


    

Extension


  • Extension的主要作用是為類添加私有方法。

  •  面向?qū)ο缶幊痰牧硗庖粋€(gè)名字叫面向接口編程。

  •  我們?cè)谠O(shè)計(jì)一個(gè)類的時(shí)候,有些方法需要對(duì)外公開(kāi)(我們稱為接口),有些方法可能僅僅內(nèi)部使用(比如:是某個(gè)方法的一個(gè)小步驟)。

  • Extension的功能是幫我們?nèi)ス芾磉@些內(nèi)部使用的方法(私有方 法)。


定義Extension

  • Extension的語(yǔ)法格式和Category很相似 

  • 相當(dāng)于把Category.h文件挪到了原始類的.m文件中

  •  Extension針對(duì)的是的類,必須有源代碼的類 

定義Extension

  • xxx.m文件

  • @interface xxx (ExtensionName) 

  • //你的方法列表

  • @end

Extension的實(shí)現(xiàn)

  • @implementation xxx

  •  //方法的實(shí)現(xiàn)

  • @end 

Category和Extension的區(qū)別

    

Protocol

  • Protocol又名協(xié)議,是iOS開(kāi)發(fā)中常用的技術(shù)。

  • 協(xié)議是一套標(biāo)準(zhǔn)(一堆方法的聲明),只有.h文件。

  •  接受協(xié)議的對(duì)象實(shí)現(xiàn)協(xié)議中定義的方法 

Protocol


  • 協(xié)議就像一張任務(wù)清單(或便利貼),上面寫了一堆需要處理的事。清單交給誰(shuí),誰(shuí)就要去完成清單上規(guī)定的任務(wù)。

  • 協(xié)議定義好之后,需要有類去遵守這個(gè)協(xié)議,實(shí)現(xiàn)協(xié)議里面的方法。

  • 遵守協(xié)議即在.h文件的父類名后寫上<協(xié)議名]]>。實(shí)現(xiàn)協(xié)議里的方法即在.m文件中實(shí)現(xiàn)協(xié)議中的方法。相當(dāng)于給這個(gè)類添加了若干個(gè)

  • 方法。這個(gè)類的實(shí)例就可以調(diào)用這些方法。

定義Protocol


  • @protocol開(kāi)始,以@end結(jié)束,例如:

  • @protocol MarryProtocol <NSObject>

  • - (void)makeMoney;

  • @optional    //可選的協(xié)議,

  • - (void)washcloth;

  • - (void)cook;

  • @end

  • 協(xié)議中的方法默認(rèn)是必須實(shí)現(xiàn)的,即@required關(guān)鍵字 @optional 修飾的方法是可選的,可實(shí)現(xiàn)也可不實(shí)現(xiàn)。


如何遵守協(xié)議


  • #import “MarryProtocol”

  • #這里要引入?yún)f(xié)議的頭文件

  • @interface Boy : NSObject <MarryProtocl>

  • ...


  • @end


  • @implementation Boy


  • //協(xié)議中方法的實(shí)現(xiàn)


  • @end


delegate設(shè)計(jì)模式

  • Protocol的核心使用場(chǎng)景是實(shí)現(xiàn)delegate設(shè)計(jì)模式。

  • delegate音譯代理。通俗的講就是代理商,主要的任務(wù)是幫你完成一些任務(wù)。

  • 比如:保姆就可以認(rèn)為是delegate,主要的任務(wù)是幫你帶孩子、做飯、洗衣服等。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI