日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OC语言之Protocol基本使用

發布時間:2023/12/31 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OC语言之Protocol基本使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

# Protocol基本概念

##1.protocol 基本概念

- Protocol翻譯過來, 叫做”協議”

??? +在寫java的時候都會有接口interface這個概念,接口就是一堆方法的聲明沒有實現,而在OC里面Interface是一個類的頭文件的聲明,并不是真正意義上的接口的意思,在OC中接口是由一個叫做協議的protocol來實現的

??? +protocol它可以聲明一些必須實現的方法和選擇實現的方法。這個和java是完全不同的

- Protocol的作用

??? +用來聲明一些方法

??? +也就說, 一個Protocol是由一系列的方法聲明組成的

---

##2.protocol 語法格式

- Protocol的定義

```

@protocol 協議名稱

// 方法聲明列表

@end

```

- 類遵守協議

??? +一個類可以遵守1個或多個協議

??? +任何類只要遵守了Protocol,就相當于擁有了Protocol的所有方法聲明

```

@interface 類名 : 父類 <協議名稱1, 協議名稱2,…>

@end

```

- 示例

```

@protocol SportProtocol <NSObject>

- (void)playFootball;

- (void)playBasketball;

@end

#import "SportProtocol.h" // 導入協議

@interface Studnet :NSObject<SportProtocol> // 遵守協議

@end

?

@implementation Student

// 實現協議方法

- (void)playBasketball

{

???NSLog(@"%s", __func__);

}

// 實現協議方法

- (void)playFootball

{

???NSLog(@"%s", __func__);

}

@end

```

##3.protocol和繼承區別

- 繼承之后默認就有實現, 而protocol只有聲明沒有實現

- 相同類型的類可以使用繼承, 但是不同類型的類只能使用protocol

- protocol可以用于存儲方法的聲明, 可以將多個類中共同的方法抽取出來, 以后讓這些類遵守協議即可

---

# Protocol類型限制

##1.protocol類型限制

- 設定情景:

??? +某攻城獅A希望找一個會做飯、洗衣服的女生做女朋友,有國企工作的優先。

??? +滿足條件的女生都可以向他發送消息

?

- 從題目中我們得到要求

??? +會做飯

??? +會洗衣服

??? +有份好工作

```

@protocol WifeCondition<NSObject>

- (void)cooking;

- (void)washing;

- (void)job;

@end

```

- 如何在代碼中要求對象必須具備這些行為?

??? +數據類型<協議名稱> 變量名

```

// 如果沒有遵守協議則會報警告

id<WifeCondition> wife = [[Personalloc] init];

```

# 代理設計模式

##1.

- 什么是設計模式

??? +設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。毫無疑問,設計模式于己于他人于系統都是多贏的;設計模式使代碼編制真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。

- 什么是代理設計模式

??? +生活中大家一定遇到這樣的情況了:比如說我要買一包紙,不妨就是心相印的吧,那一般人的話我應該不是去心相印的工廠里面直接去買吧,而是我們在心相印專賣店或者什么超市啊,這些地方購買,這些地方實際上就是潔麗雅毛巾的代理。這其實和我們OO中的代理模式是很相似的。

?

- 代理設計模式的場合:

??? +當對象A發生了一些行為,想告知對象B(讓對象B成為對象A的代理對象)

??? +對象B想監聽對象A的一些行為(讓對象B成為對象A的代理對象)

??? +當對象A無法處理某些行為的時候,想讓對象B幫忙處理(讓對象B成為對象A的代理對象)

---

##2.代理設計模式示例

- 嬰兒吃飯睡覺

```

// 協議

#import <Foundation/Foundation.h>

@class Baby;

?

@protocol BabyProtocol <NSObject>

- (void)feedWithBaby:(Baby *)baby;

- (void)hypnosisWithBaby:(Baby *)baby;

@end

```

#import "BabyProtocol.h"

@interface Baby : NSObject

// 食量

@property (nonatomic, assign) int food;

// 睡意

@property (nonatomic, assign) intdrowsiness;

// 餓

- (void)hungry;

// 睡意

- (void)sleepy;

@property (nonatomic, strong)id<BabyProtocol> nanny;

@end

?

@implementation Baby

?

- (void)hungry

{

???self.food -= 5;

???NSLog(@"嬰兒餓了");

???// 通知保姆

???if ([self.nanny respondsToSelector:@selector(feedWithBaby:)]) {

???????[self.nanny feedWithBaby:self];

??? }

}

?

- (void)sleepy

{

???self.drowsiness += 5;

???NSLog(@"嬰兒困了");

???// 通知保姆

???if ([self.nanny respondsToSelector:@selector(hypnosisWithBaby:)]) {

???????[self.nanny hypnosisWithBaby:self];

??? }

}

@end

```

// 保姆

@interface Nanny : NSObject<BabyProtocol>

@end

?

@implementation Nanny

- (void)feedWithBaby:(Baby *)baby

{

???baby.food += 10;

???NSLog(@"給嬰兒喂奶, 現在的食量是%i", baby.food);

}

?

- (void)hypnosisWithBaby:(Baby *)baby

{

???baby.drowsiness += 10;

???NSLog(@"哄嬰兒睡覺, 現在的睡意是%i", baby.drowsiness);

}

@end

```

- 有一個嬰兒,他本身不會自己吃飯和洗澡等等一些事情,于是嬰兒就請了一個保姆,于是嬰兒和保姆之間商定了一個協議,協議中寫明了保姆需要做什么事情,而保姆就是這個代理人,即:嬰兒和保姆之間有個協議,保姆遵守該協議,于是保姆就需要實現該協議中的條款成為代理人

---

##3.代理設計模式練習

- 學生通過中介找房子的過程,學生不知道怎么找所以讓代理幫忙找

# 代理設計模式

##1.

- 什么是設計模式

??? +設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。毫無疑問,設計模式于己于他人于系統都是多贏的;設計模式使代碼編制真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。

?

- 什么是代理設計模式

??? +生活中大家一定遇到這樣的情況了:比如說我要買一包紙,不妨就是心相印的吧,那一般人的話我應該不是去心相印的工廠里面直接去買吧,而是我們在心相印專賣店或者什么超市啊,這些地方購買,這些地方實際上就是潔麗雅毛巾的代理。這其實和我們OO中的代理模式是很相似的。

?

- 代理設計模式的場合:

??? +當對象A發生了一些行為,想告知對象B(讓對象B成為對象A的代理對象)

??? +對象B想監聽對象A的一些行為(讓對象B成為對象A的代理對象)

??? +當對象A無法處理某些行為的時候,想讓對象B幫忙處理(讓對象B成為對象A的代理對象)

---

##2.代理設計模式示例

- 嬰兒吃飯睡覺

```

// 協議

#import <Foundation/Foundation.h>

@class Baby;

?

@protocol BabyProtocol <NSObject>

- (void)feedWithBaby:(Baby *)baby;

- (void)hypnosisWithBaby:(Baby *)baby;

@end

```

#import "BabyProtocol.h"

@interface Baby : NSObject

// 食量

@property (nonatomic, assign) int food;

// 睡意

@property (nonatomic, assign) intdrowsiness;

// 餓

- (void)hungry;

// 睡意

- (void)sleepy;

@property (nonatomic, strong)id<BabyProtocol> nanny;

@end

?

@implementation Baby

?

- (void)hungry

{

???self.food -= 5;

???NSLog(@"嬰兒餓了");

???// 通知保姆

???if ([self.nanny respondsToSelector:@selector(feedWithBaby:)]) {

???????[self.nanny feedWithBaby:self];

??? }

}

?

- (void)sleepy

{

???self.drowsiness += 5;

???NSLog(@"嬰兒困了");

???// 通知保姆

???if ([self.nanny respondsToSelector:@selector(hypnosisWithBaby:)]) {

???????[self.nanny hypnosisWithBaby:self];

??? }

}

@end

```

// 保姆

@interface Nanny : NSObject<BabyProtocol>

@end

?

@implementation Nanny

?

- (void)feedWithBaby:(Baby *)baby

{

???baby.food += 10;

???NSLog(@"給嬰兒喂奶, 現在的食量是%i", baby.food);

}

?

- (void)hypnosisWithBaby:(Baby *)baby

{

???baby.drowsiness += 10;

???NSLog(@"哄嬰兒睡覺, 現在的睡意是%i", baby.drowsiness);

}

@end

```

- 有一個嬰兒,他本身不會自己吃飯和洗澡等等一些事情,于是嬰兒就請了一個保姆,于是嬰兒和保姆之間商定了一個協議,協議中寫明了保姆需要做什么事情,而保姆就是這個代理人,即:嬰兒和保姆之間有個協議,保姆遵守該協議,于是保姆就需要實現該協議中的條款成為代理人

---

##3.代理設計模式練習

- 學生通過中介找房子的過程,學生不知道怎么找所以讓代理幫忙找

?

# 字符串讀寫

##1.直接讀寫文件中的字符

- 從文件中讀取

```

// 用來保存錯誤信息

NSError *error = nil;

// 讀取文件內容

NSString *str = [NSStringstringWithContentsOfFile:@"/Users/LNJ/Desktop/lnj.txt"encoding:NSUTF8StringEncoding error:&error];

// 如果有錯誤信息

if (error) {

???NSLog(@"讀取失敗, 錯誤原因是:%@", [error localizedDescription]);

} else { // 如果沒有錯誤信息

???NSLog(@"讀取成功, 文件內容是:\n%@", str);

}

```

- 寫入文件中

```

NSString *str = @"江哥";

BOOL flag = [strwriteToFile:@"/Users/LNJ/Desktop/lnj.txt" atomically:YESencoding:NSUTF8StringEncoding error:nil];

if (flag == 1)

{

???NSLog(@"寫入成功");

}

```

- 重復寫入同一文件會覆蓋掉上一次的內容

?

```

NSString *str1 = @"江哥";

BOOL flag = [str1writeToFile:@"/Users/LNJ/Desktop/lnj.txt" atomically:YESencoding:NSUTF8StringEncoding error:nil];

?

NSString *str2 = @"南哥";

[str2writeToFile:@"/Users/LNJ/Desktop/lnj.txt" atomically:YESencoding:NSUTF8StringEncoding error:nil];

?

NSString *str = [NSStringstringWithContentsOfFile:@"/Users/LNJ/Desktop/lnj.txt"encoding:NSUTF8StringEncoding error:&error];

NSLog(@"str = %@", str);

?

輸出結果:南哥

---

##2.NSURL簡介

- 什么是URL

??? +URL的全稱是Uniform Resource Locator(統一資源定位符)

??? +URL是互聯網上標準資源的地址

? ??+ 互聯網上的每個資源都有一個唯一的URL,它包含的信息指出資源的位置

??? +根據一個URL就能找到唯一的一個資源

?

- URL的格式

??? +基本URL包含協議、主機域名(服務器名稱\IP地址)、路徑

??? +舉例: http://www.520it.com/ios/images/content_25.jpg

??? +可以簡單認為: URL == 協議頭://主機域名/路徑

?

- 常見的URL協議頭(URL類型)

??? +http\https :超文本傳輸協議資源, 網絡資源

??? +ftp :文件傳輸協議

??? +file :本地電腦的文件

?

- URL的創建

??? +傳入完整的字符串創建

```

NSURL *url = [NSURLURLWithString:@"file:///Users/LNJ/Desktop/str.txt"];

```

??? +通過文件路徑創建(默認就是file協議的)

```

NSURL *url = [NSURLfileURLWithPath:@"/Users/LNJ/Desktop/str.txt"];

```

##3.使用NSURL讀寫字符串

- 從URL中讀取

```

// 用來保存錯誤信息

NSError *error = nil;

?

// 創建URL路徑

//???NSString *path =@"file://192.168.199.119/Users/LNJ/Desktop/lnj.txt";

?

//? 本機可以省略主機域名

//???NSString *path = @"file:///Users/LNJ/Desktop/lnj.txt";

???NSURL *url = [NSURL URLWithString:path];

?

//? 利用fileURLWithPath方法創建出來的URL默認協議頭為file://

NSURL *url = [NSURLfileURLWithPath:@"/Users/LNJ/Desktop/lnj.txt"];

?

// 讀取文件內容

NSString *str = [NSStringstringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

?

// 如果有錯誤信息

if (error) {

???NSLog(@"讀取失敗, 錯誤原因是:%@", [error localizedDescription]);

} else { // 如果沒有錯誤信息

???NSLog(@"讀取成功, 文件內容是:\n%@", str);

}

```

- 寫入URL中

```

NSString *str = @"江哥";

[str writeToURL:[NSURLURLWithString:@"/Users/LNJ/Desktop/lnj.txt"] atomically:YES encoding:NSUTF8StringEncodingerror:nil];

```

# 字符串比較

##1.NSString大小寫處理

- 全部字符轉為大寫字母

??? +\- (NSString *)uppercaseString;

- 全部字符轉為小寫字母

??? +\- (NSString *)lowercaseString

- 首字母變大寫,其他字母都變小寫

??? +\- (NSString *)capitalizedString

---

##2.NSString比較

- \- (BOOL)isEqualToString:(NSString*)aString;

??? +兩個字符串的內容相同就返回YES, 否則返回NO

```

???NSString *str1 = @"lnj";

???NSString *str2 = [NSString stringWithFormat:@"lnj"];

???if ([str1 isEqualToString:str2]) {

???????NSLog(@"字符串內容一樣");

??? }

?

???if (str1 == str2) {

???????NSLog(@"字符串地址一樣");

??? }

```

- \- (NSComparisonResult)compare:(NSString*)string;

??? +這個方法可以用來比較兩個字符串內容的大小

??? +比較方法: 逐個字符地進行比較ASCII值,返回NSComparisonResult作為比較結果

??? +NSComparisonResult是一個枚舉,有3個值:

???????* 如果左側?? > 右側,返回NSOrderedDescending,

???????* 如果左側?? < 右側,返回NSOrderedAscending,

???????* 如果左側? == 右側返回NSOrderedSame

```

???NSString *str1 = @"abc";

???NSString *str2 = @"abd";

???switch ([str1 compare:str2]) {

???????case NSOrderedAscending:

???????????NSLog(@"后面一個字符串大于前面一個");

???????????break;

???????case NSOrderedDescending:

???????????NSLog(@"后面一個字符串小于前面一個");

???????????break;

???????case NSOrderedSame:

???????????NSLog(@"兩個字符串一樣");

???????????break;

??? }

??? 輸出結果: 后面一個字符串大于前面一個

```

- \- (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;

??? +忽略大小寫進行比較,返回值與compare:一致

```

???NSString *str1 = @"abc";

???NSString *str2 = @"ABC";

???switch ([str1 caseInsensitiveCompare:str2]) {

???????case NSOrderedAscending:

???????????NSLog(@"后面一個字符串大于前面一個");

???????????break;

???????case NSOrderedDescending:

???????????NSLog(@"后面一個字符串小于前面一個");

???????????break;

???????case NSOrderedSame:

???????????NSLog(@"兩個字符串一樣");

???????????break;

??? }

??? 輸出結果:兩個字符串一樣

```

# 字符串搜索

##1.字符串搜索

- \- (BOOL)hasPrefix:(NSString *)aString;

??? +是否以aString開頭

- \- (BOOL)hasSuffix:(NSString *)aString;

??? +是否以aString結尾

- \- (NSRange)rangeOfString:(NSString*)aString;

??? +用來檢查字符串內容中是否包含了aString

??? +如果包含, 就返回aString的范圍

??? +如果不包含, NSRange的location為NSNotFound, length為0

---

##2.NSRange基本概念

- NSRange是Foundation框架中比較常用的結構體, 它的定義如下:

```

typedef struct _NSRange {

???NSUInteger location;

???NSUInteger length;

} NSRange;

// NSUInteger的定義

typedef unsigned int NSUInteger;

```

- NSRange用來表示事物的一個范圍,通常是字符串里的字符范圍或者數組里的元素范圍

?

- NSRange有2個成員

??? +NSUInteger location : 表示該范圍的起始位置

??? +NSUInteger length : 表示該范圍內的長度

?

- 比如@“I love LNJ”中的@“LNJ”可以用location為7,length為3的范圍來表示

---

##3.NSRange的創建

- 有3種方式創建一個NSRange變量

- 方式1

```

NSRange range;

range.location = 7;

range.length = 3;

```

- 方式2

```

NSRange range = {7, 3};

或者

NSRange range = {.location = 7,.length =3};

```

- 方式3 : 使用NSMakeRange函數

```

NSRange range = NSMakeRange(7, 3);

```

# 字符串截取

##1.字符串的截取

- \- (NSString*)substringFromIndex:(NSUInteger)from;

??? +從指定位置from開始(包括指定位置的字符)到尾部

```

???NSString *str = @"<head>小碼哥</head>";

???str = [str substringFromIndex:7];

???NSLog(@"str = %@", str);

?

輸出結果: 小碼哥</head>

```

- \- (NSString*)substringToIndex:(NSUInteger)to;

??? +從字符串的開頭一直截取到指定的位置to,但不包括該位置的字符

```

???NSString *str = @"<head>小碼哥</head>";

???str = [str substringToIndex:10];

???NSLog(@"str = %@", str);

輸出結果: <head>小碼哥

```

- \- (NSString*)substringWithRange:(NSRange)range;

??? +按照所給出的NSRange從字符串中截取子串

```

???NSString *str = @"<head>小碼哥</head>";

???NSRange range;

???/*

???range.location = 6;

???range.length = 3;

???*/

???range.location = [str rangeOfString:@">"].location + 1;

???range.length = [str rangeOfString:@"</"].location -range.location;

???NSString *res = [str substringWithRange:range];

???NSLog(@"res = %@", res);

輸出結果: 小碼哥

```

# 字符串替換

##1.字符串的替換函數

- \- (NSString*)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString*)replacement;

??? +用replacement替換target

```

???NSString *str = @"http:**520it.com*img*ljn.gif";

???NSString *newStr = [strstringByReplacingOccurrencesOfString:@"*" withString:@"/"];

???NSLog(@"newStr = %@", newStr);

輸出結果: http://www.520it.com/img/ljn.gif

```

- \- (NSString*)stringByTrimmingCharactersInSet:(NSCharacterSet *)set;

??? +去除首尾

```

???NSString *str =? @"?? http://520it.com/img/ljn.gif?? ";

???NSString *newStr = [str stringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceCharacterSet]];

???NSLog(@"str =|%@|", str);

???NSLog(@"newStr =|%@|", newStr);

?

輸出結果:

str =|??http://520it.com/img/ljn.gif?? |

newStr =|http://520it.com/img/ljn.gif|

```

???NSString *str =?@"***http://520it.com/img/ljn.gif***";

???NSString *newStr = [str stringByTrimmingCharactersInSet:[NSCharacterSetcharacterSetWithCharactersInString:@"*"]];

?

???NSLog(@"str =|%@|", str);

???NSLog(@"newStr =|%@|", newStr);

?

輸出結果:

str =|***http://520it.com/img/ljn.gif***|

newStr =|http://520it.com/img/ljn.gif|

```

# 字符串與路徑

##1.NSString與路徑

- \- (BOOL)isAbsolutePath;

??? +是否為絕對路徑

```

????// 其實就是判斷是否以/開頭

//???NSString *str = @"/Users/NJ-Lee/Desktop/lnj.txt";

???NSString *str = @"Users/NJ-Lee/Desktop/lnj.txt";

???if ([str isAbsolutePath]) {

???????NSLog(@"是絕對路徑");

???}else

??? {

???????NSLog(@"不是絕對路徑");

??? }

```

- \- (NSString *)lastPathComponent;

??? +獲得最后一個目錄

```

???// 截取最后一個/后面的內容

???NSString *str = @"/Users/NJ-Lee/Desktop/lnj.txt";

???NSString *component = [str lastPathComponent];

???NSLog(@"component = %@", component);

```

- \- (NSString*)stringByDeletingLastPathComponent;

??? +刪除最后一個目錄

```

???// 其實就是上次最后一個/和之后的內容

???NSString *str = @"/Users/NJ-Lee/Desktop/lnj.txt";

???NSString *newStr = [str stringByDeletingLastPathComponent];

???NSLog(@"newStr = %@", newStr);

```

- \- (NSString*)stringByAppendingPathComponent:(NSString *)str;

??? +在路徑的后面拼接一個目錄

(也可以使用stringByAppendingString:或者stringByAppendingFormat:拼接字符串內容)

```

// 其實就是在最后面加上/和要拼接得內容

???// 注意會判斷后面有沒有/有就不添加了, 沒有就添加, 并且如果有多個會替換為1個

//???NSString *str = @"/Users/NJ-Lee/Desktop";

???NSString *str = @"/Users/NJ-Lee/Desktop/";

???NSString *newStr = [strstringByAppendingPathComponent:@"lnj"];

???NSLog(@"newStr = %@", newStr);

```

##2.NSString與文件拓展名

- \- (NSString *)pathExtension;

??? +獲得拓展名

```

???// 其實就是從最后面開始截取.之后的內容

//???NSString *str = @"lnj.txt";

???NSString *str = @"abc.lnj.txt";

???NSString *extension = [str pathExtension];

???NSLog(@"extension = %@", extension);

```

- \- (NSString*)stringByDeletingPathExtension;

??? +刪除尾部的拓展名

```

???// 其實就是上次從最后面開始.之后的內容

//???NSString *str = @"lnj.txt";

???NSString *str = @"abc.lnj.txt";

???NSString *newStr = [str stringByDeletingPathExtension];

???NSLog(@"newStr = %@", newStr);

```

- \- (NSString*)stringByAppendingPathExtension:(NSString *)str;

??? +在尾部添加一個拓展名

```

// 其實就是在最后面拼接上.和指定的內容

???NSString *str = @"lnj";

???NSString *newStr = [strstringByAppendingPathExtension:@"gif"];

???NSLog(@"newStr = %@", newStr);

```

# 字符串與基本數據類型轉換

##1.

- \- (NSUInteger)length;

??? +返回字符串的長度(有多少個文字)

?

- \-(unichar)characterAtIndex:(NSUInteger)index;

??? +返回index位置對應的字符

---

##2.字符串和其他數據類型轉換

- 轉為基本數據類型

??? +\- (double)doubleValue;

??? +\- (float)floatValue;

??? +\- (int)intValue;

```

???NSString *str1 = @"110";

???NSString *str2 = @"10";

???int res = str1.intValue + str2.intValue;

???NSLog(@"res = %i", res);

```

???NSString *str1 = @"110";

???NSString *str2 = @"10.1";

???double res = str1.doubleValue + str2.doubleValue;

???NSLog(@"res = %f", res);

```

- 轉為C語言中的字符串

??? +\- (char *)UTF8String;

```

???NSString *str = @"abc";

???const char *cStr = [str UTF8String];

??? NSLog(@"cStr= %s", cStr);

```

???char *cStr = "abc";

???NSString *str = [NSString stringWithUTF8String:cStr];

???NSLog(@"str = %@", str);

```

# NSMutableString練習

##1.NSMutableString練習

- 從要求講3個520it拼接在一起

?

- 會生成很多新的字符串

```

???NSString *res = @"";

???NSString *subStr = @"520";

???// 1.拼接字符串

//???res = [res stringByAppendingString:subStr];

//???res = [res stringByAppendingString:@" "];

//

//???res = [res stringByAppendingString:subStr];

//???res = [res stringByAppendingString:@" "];

//

//???res = [res stringByAppendingString:subStr];

//???res = [res stringByAppendingString:@" "];

?

???for (int i = 0; i < 3; ++i) {

???????res = [res stringByAppendingString:subStr];

???????res = [res stringByAppendingString:@" "];

??? }

???// 2.刪除末尾的空格

//???res = [res stringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceCharacterSet]];

???res = [res substringToIndex:res.length - 1];

???NSLog(@"res = |%@|", res);

```

- 不會生成新的字符串

```

???NSString *subStr = @"520it";

???NSMutableString *res = [NSMutableString string];

???// 1.拼接字符串

???for (int i = 0; i < 3; ++i) {

???????[res appendString:subStr];

???????[res appendString:@" "];

??? }

???// 2.刪除空格

//???[res replaceCharactersInRange:NSMakeRange(res.length - 1, 1)withString:@""];

???[res deleteCharactersInRange:NSMakeRange(res.length - 1, 1)];

???NSLog(@"res = |%@|", res);

```

# NSMutableString常用方法

##1.NSMutableString常用方法

- \- (void)appendString:(NSString*)aString;

??? +拼接aString到最后面

```

- \- (void)appendFormat:(NSString *)format,...;

??? +拼接一段格式化字符串到最后面

```

???NSMutableString *strM = [NSMutableString string];

???NSLog(@"strM = %@", strM);

???[strM appendString:@"lnj"];

???NSLog(@"strM = %@", strM);

```

- \-(void)deleteCharactersInRange:(NSRange)range;

??? +刪除range范圍內的字符串

```

???NSMutableString *strM = [NSMutableStringstringWithString:@"http://www.520it.com"];

????// 一般情況下利用rangeOfString和deleteCharactersInRange配合刪除指定內容

????NSRange range = [strM rangeOfString:@"http://"];

????[strM deleteCharactersInRange:range];

????NSLog(@"strM = %@", strM);

```

- \- (void)insertString:(NSString *)aStringatIndex:(NSUInteger)loc;

??? +在loc這個位置中插入aString

```

???NSMutableString *strM = [NSMutableStringstringWithString:@"www.520it.com"];

???[strM insertString:@"http://" atIndex:0];

??? NSLog(@"strM= %@", strM);

```

- \-(void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;

??? +使用aString替換range范圍內的字符串

```

???NSMutableString *strM = [NSMutableStringstringWithString:@"http://www.520it.com/lnj.png"];

???NSRange range = [strM rangeOfString:@"lnj"];

???[strM replaceOccurrencesOfString:@"lnj"withString:@"jjj" options:0 range:range];

???NSLog(@"strM = %@", strM);

```

##2.字符串使用注意事項

- @”lnj”這種方式創建的字符串始終是NSString,不是NSMutalbeString.所以下面的代碼創建的還是NSString,此時使用可變字符串的函數,無法操作字符串。

```

NSMutalbeString *s1 = @”lnj”;

// 會報錯

[strM insertString:@"my name is "atIndex:0];

```

# NSArray 遍歷

##1.NSArray的下標遍歷

```

???NSArray *arr = @[p1, p2, p3, p4, p5];

???for (int i = 0; i < arr.count; ++i) {

???????Person *p = arr[i];

???????[p say];

??? }

```

##2.NSArray的快速遍歷

```

???NSArray *arr = @[p1, p2, p3, p4, p5];

??for (Person *p in arr) {

???????[p say];

??? }

```

##3.NSArray 使用block進行遍歷

```

???[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

???????NSLog(@"obj = %@, idx = %lu", obj, idx);

???????Person *p = obj;

???????[p say];

???}];

```

##4.NSArray給所有元素發消息

- 讓集合里面的所有元素都執行aSelector這個方法

??? +\- (void)makeObjectsPerformSelector:(SEL)aSelector;

??? +\- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument;

```

???// 讓數組中所有對象執行這個方法

???// 注意: 如果數組中的對象沒有這個方法會報錯

//???[arr makeObjectsPerformSelector:@selector(say)];

???[arr makeObjectsPerformSelector:@selector(eat:)withObject:@"bread"];

```

# NSArray排序

##1.NSArray排序

- Foundation自帶類排序

```

NSArray *arr = @[@(1), @(9), @(5), @(2)];

NSArray *newArr = [arrsortedArrayUsingSelector:@selector(compare:)];

```

- 自定義類排序

```

???NSArray *arr = @[p1, p2, p3, p4, p5];

???//??? 默認按照升序排序

???NSArray *newArr = [arr sortedArrayWithOptions:NSSortConcurrentusingComparator:^NSComparisonResult(Person *obj1, Person *obj2) {

???????return obj1.age > obj2.age;

???}];

???NSLog(@"%@", newArr);

---

# NSArray文件讀寫

##1.NSArray數據寫入到文件中

```

???NSArray *arr = @[@"lnj", @"lmj", @"jjj",@"xcq"];

???BOOL flag = [arrwriteToFile:@"/Users/LNJ/Desktop/persons.plist" atomically:YES];

???NSLog(@"%i", flag);

```

##2.從文件中讀取數據到NSArray中

```

???NSArray *newArr = [NSArrayarrayWithContentsOfFile:@"/Users/LNJ/Desktop/persons.xml"];

???NSLog(@"%@", newArr);

```

# NSArray 與字符串

##1.把數組元素鏈接成字符串

- \- (NSString*)componentsJoinedByString:(NSString *)separator;

??? +這是NSArray的方法, 用separator作拼接符將數組元素拼接成一個字符串

```

???NSArray *arr = @[@"lnj", @"lmj", @"jjj",@"xcq"];

???NSString *res = [arr componentsJoinedByString:@"*"];

???NSLog(@"res = %@", res);

輸出結果:

lnj*lmj*jjj*xcq

```

##2.字符串分割方法

- \- (NSArray*)componentsSeparatedByString:(NSString *)separator;

??? +這是NSString的方法,將字符串用separator作為分隔符切割成數組元素

```

???NSString *str = @"lnj-lmj-jjj-xcq";

???NSArray *arr = [str componentsSeparatedByString:@"-"];

???NSLog(@"%@", arr);

輸出結果:

(

???lnj,

???lmj,

???jjj,

???xcq

)

?

# Foundation框架介紹

##1.Foundation框架介紹

- 什么是框架?

??? +眾多功能\API的集合

??? +框架是由許多類、方法、函數、文檔按照一定的邏輯組織起來的集合,以便使研發程序變得更容易在OS X下的Mac操作系統中大約有80個框架為所有程序開發奠定基礎的框架稱為Foundation 框架

?

- Foundation框架的作用

??? +Foundation框架是Mac\iOS中其他框架的基礎

??? +Foundation框架包含了很多開發中常用的數據類型:

???????* 結構體

???????* 枚舉

???????* 類

?

- 如何使用Foundation框架

??? +Foundation框架中大約有125個可用的頭文件,作為一個簡單的形式,可以簡單地使用以下語句導入#import<Foundation/Foundation.h>因為Foundation.h文件實際上導入其他所有Foundation框架中的頭文件

?

- Foundation框架中的類

??? +Foundation框架允許使用一些基本對象,如數字和字符串,以及一些對象集合,如數組,字典和集合,其他功能包括處理日期和時間、內存管理、處理文件系統、存儲(或歸檔)對象、處理幾何數據結構(如點和長方形)

??? +Foundation框架提供了非常多好用的類, 比如

```

NSString : 字符串

NSArray : 數組

NSDictionary : 字典

NSDate : 日期

NSData : 數據

NSNumber : 數字

```

- Foundation框架中的類都是以NS為前綴(Next Step的縮寫)

??? +喬布斯于1976年創立蘋果公司

??? +喬布斯于1985年離開蘋果公司, 創立NeXT公司, 開發了Next Step操作系統

??? +在開發Next Step操作系統過程中產生了Foundation框架

??? +1997年, 蘋果公司收購NeXT公司,?? 喬布斯重返蘋果公司(Mac系統就是基于NextStep系統)

??? +2007年, 蘋果公司發布了iOS系統(iOS系統基于Mac系統)

---

##2.Foundation框架常見錯誤

- 有時候會在不經意之間修改了系統自帶的頭文件,比如NSString.h, 這時會出現以下錯誤:

![](http://7xj0kx.com1.z0.glb.clouddn.com/foundationerror.png)

- 解決方案很簡單, 只需要刪除Xcode的緩存即可

??? +緩存路徑是/Users/用戶名/Library/Developer/Xcode/DerivedData(默認情況下, 這是一個隱藏文件夾)

?

- 要想看到上述文件夾, 必須在終端敲指令顯示隱藏文件夾, 指令如下

??? +顯示隱藏文件 : defaults write com.apple.finder AppleShowAllFiles –bool true

??? +隱藏隱藏文件 : defaults write com.apple.finder AppleShowAllFiles –bool false

??? +(輸入指令后, 一定要重新啟動Finder)

?

# NSArray基本概念

##1.NSArray的基本概念

- 什么是NSArray?

??? +NSArray是OC中的數組類,開發中建議盡量使用NSArray替代C語言中的數組

??? +C語言中數組的弊端

???????* int array[4] = {10, 89, 27, 76};

???????* 只能存放一種類型的數據.(類型必須一致)

???????* 不能很方便地動態添加數組元素、不能很方便地動態刪除數組元素(長度固定)

?

- NSArray的使用注意

??? +只能存放任意OC對象, 并且是有順序的

??? +不能存儲非OC對象, 比如int\float\double\char\enum\struct等

??? +它是不可變的,一旦初始化完畢后,它里面的內容就永遠是固定的, 不能刪除里面的元素, 也不能再往里面添加元素

---

##2.NSArray的創建方式

- \+ (instancetype)array;

- \+(instancetype)arrayWithObject:(id)anObject;

- \+ (instancetype)arrayWithObjects:(id)firstObj,...;

- \+ (instancetype)arrayWithArray:(NSArray*)array;

?

- \+ (id)arrayWithContentsOfFile:(NSString*)path;

- \+ (id)arrayWithContentsOfURL:(NSURL*)url;

---

##3.NSArray 的使用注意事項

- NSArray直接使用NSLog()作為字符串輸出時是小括號括起來的形式。

- NSArray中不能存儲nil,因為NSArray認為nil是數組的結束(nil是數組元素結束的標記)。nil就是0。0也是基本數據類型,不能存放到NSArray中。

```

???NSArray *arr = [NSArray arrayWithObjects:@"lnj", nil,@"lmj",@"jjj", nil];

???NSLog(@"%@", arr);

輸出結果:

(

???lnj

)

```

##4.NSArray的常用方法

- \- (NSUInteger)count;

??? +獲取集合元素個數

?

- \- (id)objectAtIndex:(NSUInteger)index;

??? +獲得index位置的元素

?

- \- (BOOL)containsObject:(id)anObject;

??? +是否包含某一個元素

?

- \- (id)lastObject;

??? +返回最后一個元素

?

- \- (id)firstObject;

??? +返回最后一個元素

?

- \-(NSUInteger)indexOfObject:(id)anObject;

??? +查找anObject元素在數組中的位置(如果找不到,返回-1)

?

- \- (NSUInteger)indexOfObject:(id)anObjectinRange:(NSRange)range;

??? +在range范圍內查找anObject元素在數組中的位置

---

##5.NSArray的簡寫形式

- 自從2012年開始, Xcode的編譯器多了很多自動生成代碼的功能, 使得OC代碼更加精簡

?

- 數組的創建

??? +之前

```

[NSArray arrayWithObjects:@"Jack",@"Rose", @"Jim", nil];

```

??? +現在

```

@[@"Jack", @"Rose",@"Jim"];

```

- 數組元素的訪問

??? +之前

```

[array objectAtIndex:0];

```

??? +現在

```

array[0];

```

# NSMutableArray基本概念

##1.NSMutableArray介紹

- 什么是NSMutableArray

??? +NSMutableArray是NSArray的子類

??? +NSArray是不可變的,一旦初始化完畢后,它里面的內容就永遠是固定的, 不能刪除里面的元素, 也不能再往里面添加元素

??? +NSMutableArray是可變的,隨時可以往里面添加\更改\刪除元素

---

##2.NSMutableArray基本用法

- 創建空數組

```

NSMutableArray *arr = [NSMutableArrayarray];

```

- 創建數組,并且指定長度為5,此時也是空數組

```

NSMutableArray *arr2 = [[NSMutableArrayalloc] initWithCapacity:5];

```

- 創建一個數組,包含兩個元素

```

NSMutableArray *arr3 = [NSMutableArrayarrayWithObjects:@"1",@"2", nil];

```

- 調用對象方法創建數組

```

NSMutableArray *arr4 = [[NSMutableArrayalloc] initWithObjects:@"1",@"2", nil];

```

- \- (void)addObject:(id)object;

??? +添加一個元素

- \- (void)addObjectsFromArray:(NSArray*)array;

??? +添加otherArray的全部元素到當前數組中

- \- (void)insertObject:(id)anObjectatIndex:(NSUInteger)index;

??? +在index位置插入一個元素

- \- (void)removeLastObject;

??? +刪除最后一個元素

?

- \- (void)removeAllObjects;

??? +刪除所有的元素

?

- \-(void)removeObjectAtIndex:(NSUInteger)index;

??? +刪除index位置的元素

?

- \- (void)removeObject:(id)object;

??? +刪除特定的元素

?

- \-(void)removeObjectsInRange:(NSRange)range;

??? +刪除range范圍內的所有元素

?

- \- (void)replaceObjectAtIndex:(NSUInteger)indexwithObject:(id)anObject;

??? +用anObject替換index位置對應的元素

?

- \-(void)exchangeObjectAtIndex:(NSUInteger)idx1withObjectAtIndex:(NSUInteger)idx2;

??? +交換idx1和idx2位置的元素

---

##3.NSMutableArray 錯誤用法

- 不可以使用@[]創建可變數組

```

NSMutableArray *array = @[@"lnj",@"lmj", @"jjj"];

// 報錯, 本質還是不可變數組

[array addObject:@“Peter”];

```

# NSMutableString基本概念

##1.NSMutableString 基本概念

- NSMutableString 類 繼承NSString類,那么NSString

總結

以上是生活随笔為你收集整理的OC语言之Protocol基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产成人av片 | 91天堂素人约啪 | 人人爽人人爽人人爽人人爽 | 成人免费观看完整版电影 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 99在线免费观看视频 | 国产成人av网站 | 成人黄色在线播放 | 在线国产激情视频 | 国产成人精品午夜在线播放 | 亚洲精品在线一区二区 | 久久福利精品 | 国产精品久久久久久久久久 | 日韩欧美aaa | 成人91免费视频 | 日韩有码中文字幕在线 | 懂色av懂色av粉嫩av分享吧 | 五月激情久久久 | 91看片成人 | 黄色网中文字幕 | 91精品综合| 久av电影| 亚洲精品免费看 | 婷婷六月综合网 | 精品一区二三区 | 成人久久视频 | 国产青春久久久国产毛片 | 日韩乱色精品一区二区 | 狠狠色香婷婷久久亚洲精品 | www.五月天婷婷 | 久久五月婷婷综合 | 久久久久久久久久亚洲精品 | 久久色中文字幕 | 日韩大片在线 | 99色在线观看 | 九九视频网 | 久久av一区二区三区亚洲 | 久久久精品欧美一区二区免费 | 激情欧美一区二区三区 | 国产第一页精品 | 欧美91精品国产自产 | 97综合在线 | 亚洲一区免费在线 | 超级碰碰视频 | www狠狠操 | 97超碰人人模人人人爽人人爱 | 久久呀| 国产一区福利在线 | 粉嫩高清一区二区三区 | 热re99久久精品国产66热 | 开心激情五月网 | 国产视频91在线 | 久久综合色婷婷 | 成人免费观看视频大全 | 狠狠色丁香婷婷综合橹88 | 日韩精品一卡 | 日韩视频在线观看视频 | 国内精品久久影院 | 亚洲精品久久久久www | 久久精品久久精品久久 | 日韩一区二区三区高清在线观看 | 96亚洲精品久久久蜜桃 | 一区二区精品视频 | 五月开心激情 | 91精品一区二区三区蜜臀 | 天天操夜夜看 | 三三级黄色片之日韩 | 久久伦理影院 | 久久成年人网站 | 国产 日韩 欧美 在线 | 美女视频黄是免费的 | 91九色视频观看 | 国产中文字幕视频在线观看 | 六月色丁 | 中文字幕人成乱码在线观看 | 亚洲乱码国产乱码精品天美传媒 | 国产亚洲视频系列 | 久久av高清| 欧美另类交在线观看 | 日本久久久久久久久久久 | 国产精品女同一区二区三区久久夜 | 成人久久精品视频 | 国产精品久久久久久久久久不蜜月 | 精品国产理论片 | 国产精品小视频网站 | 久久综合狠狠综合久久综合88 | 婷婷久操 | 久久99在线视频 | 91黄色在线看 | 在线综合 亚洲 欧美在线视频 | 久久这里有精品 | 黄色小说视频在线 | 亚洲毛片在线观看. | 国产粉嫩在线观看 | 国产午夜精品av一区二区 | 在线一二三四区 | 深爱激情五月综合 | 少妇bbbb搡bbbb搡bbbb | 久久精品区 | 婷婷六月天在线 | 精品一区二区免费 | 国产精品久久久久久久久岛 | 毛片永久免费 | 国内久久精品视频 | 国产在线观看一 | 六月丁香六月婷婷 | www狠狠操 | 超碰公开97 | 中文亚洲欧美日韩 | 日日干天天干 | 91av在线视频免费观看 | 久久综合国产伦精品免费 | 国产免费观看视频 | av 在线观看 | 欧美作爱视频 | 五月天六月婷婷 | 超级碰视频 | 国产精彩在线视频 | 成人毛片100免费观看 | 超碰97.com | 国产综合精品一区二区三区 | 久久视频网址 | 日韩欧美在线观看一区二区 | 久久久999精品视频 国产美女免费观看 | 999成人免费视频 | 在线日韩视频 | bbbb操bbbb| 国产精品丝袜久久久久久久不卡 | 日韩videos| 欧美午夜一区二区福利视频 | 国产亚洲人成网站在线观看 | 国产做爰视频 | 天堂av在线7| 9999亚洲 | 日韩午夜小视频 | 亚洲资源在线观看 | 国产一级二级在线播放 | 婷婷精品国产一区二区三区日韩 | 69中文字幕 | a天堂中文在线 | 精品视频久久久 | 91精品人成在线观看 | 欧美 亚洲 另类 激情 另类 | 国产精品麻豆99久久久久久 | 一区二区三区免费在线观看 | 精品你懂的 | 国产精品日韩高清 | 爱情影院aqdy鲁丝片二区 | 日韩在线免费视频观看 | 视频在线观看入口黄最新永久免费国产 | 久久久久久高潮国产精品视 | 99视频 | 97在线视频免费 | 天堂va在线高清一区 | 精品欧美一区二区在线观看 | 国产精品久久久久久一区二区 | 午夜性生活 | 亚洲国产高清在线观看视频 | 亚州日韩中文字幕 | 伊人资源视频在线 | 久草国产在线观看 | 六月激情网 | 日韩午夜在线播放 | 五月婷婷综合久久 | 日韩网站在线播放 | 久久精品国产免费看久久精品 | 东方av在 | 中文字幕免费观看全部电影 | 91香蕉久久| 日韩精品91偷拍在线观看 | 人人草人人草 | 91综合久久一区二区 | 不卡av在线| 久久超级碰视频 | 国产精品 日韩精品 | 日韩av黄 | 99爱精品视频 | 丁香激情婷婷 | 51精品国自产在线 | 亚洲精品久久久久中文字幕二区 | 国产一区视频在线 | 中文在线www | 超碰av在线播放 | 欧美在线1区 | 高清国产午夜精品久久久久久 | 在线中文字幕av观看 | 日本在线视频一区二区三区 | 精品一区二区在线免费观看 | 日本久久精 | 亚洲免费av一区二区 | 国产精品粉嫩 | free. 性欧美.com | 午夜国产一区二区三区四区 | 一区二区视频播放 | 国产精品久久麻豆 | av免费网站在线观看 | 国产精品亚洲成人 | 国产一区二区在线免费播放 | 亚洲永久精品国产 | 亚洲精品欧美精品 | 首页国产精品 | 国产在线播放不卡 | 黄色软件视频大全免费下载 | 九热精品| 国产精品乱码一区二三区 | 91精品久久久久久久久久久久久 | 中文在线免费观看 | 国产精品青草综合久久久久99 | 免费黄色一区 | 乱男乱女www7788 | 成人a毛片 | 久久视精品 | 久久午夜精品 | 欧美 亚洲 另类 激情 另类 | 久久99精品久久久久婷婷 | 亚洲精品麻豆 | 99理论片| 香蕉97视频观看在线观看 | 欧美日韩伦理在线 | 成人动图 | 美女国产免费 | 国产一区在线视频播放 | 日韩在线视频不卡 | 亚洲一区欧美精品 | 在线影视 一区 二区 三区 | 日本大片免费观看在线 | 国产又粗又猛又黄又爽视频 | 亚洲第一av在线播放 | 久草亚洲视频 | 四虎在线视频 | 欧美日韩国产一区二 | 白丝av在线 | 成人免费在线观看入口 | 成人黄色在线视频 | 在线观看一级片 | 亚州av免费 | 国产亚州av | 色婷婷久久久综合中文字幕 | 成人在线小视频 | 久久久www免费电影网 | 91高清视频 | 亚洲男男gaygay无套 | 欧美aaaxxxx做受视频 | 在线视频观看亚洲 | 亚洲综合五月 | 91人人网 | 波多野结衣在线观看一区二区三区 | 欧美精品被 | 国产成人精品午夜在线播放 | 亚洲欧美日韩国产一区二区三区 | 日韩久久午夜一级啪啪 | 亚洲欧美日韩精品一区二区 | 精品成人a区在线观看 | 国产精品成人自拍 | 国产成在线观看免费视频 | 在线观看精品视频 | 色噜噜在线观看 | 国产精品久久99综合免费观看尤物 | av在线影片| 久久亚洲热| 久久精品视频在线免费观看 | 91精品国产乱码久久桃 | 国内揄拍国内精品 | 久久天天躁狠狠躁夜夜不卡公司 | 成人福利在线 | 成人免费网站在线观看 | 亚洲精品视频在 | 亚洲精品国产视频 | 中文字幕影视 | 在线视频区 | 久久久久久久久久久免费视频 | 亚洲精品视频一 | 麻豆va一区二区三区久久浪 | 免费色婷婷 | 国产精品久久久久高潮 | 九九久久影视 | 亚洲精品国产日韩 | 在线观看亚洲国产 | 在线导航福利 | 99精品国产视频 | 亚洲一级国产 | 久久avav | 欧美 日韩 国产 成人 在线 | 黄a网 | 国产专区精品 | 伊人成人激情 | 免费精品国产va自在自线 | 欧美日韩色婷婷 | 狠狠色丁香婷婷综合视频 | 国产精品久久久久久久久久久久午夜 | 欧美日韩国产综合网 | 最近日本字幕mv免费观看在线 | 国内三级在线观看 | 亚洲精品国产精品99久久 | 久久成视频| 玖玖色在线观看 | 超碰在线人人 | 波多野结衣在线观看一区 | 91九色视频观看 | 国产中文字幕亚洲 | 人人超碰97 | 午夜 久久 tv | 综合在线亚洲 | 亚洲精品久久久久久中文传媒 | 国产一区二区免费看 | 日本黄色a级大片 | 日日草天天草 | 国产精品女主播一区二区三区 | 国产黄色一级大片 | 日韩黄色一级电影 | 日韩欧美久久 | 色综合久久久久综合 | av不卡中文 | 国产999在线观看 | 国产精品久久久免费看 | 在线观看一区 | 色天天久久 | 国产精品2020 | 日韩国产欧美在线播放 | 久久久久久久久久久久久9999 | 999精品| 99久久99久久精品国产片果冰 | av网站在线观看免费 | av福利超碰网站 | 欧美人体xx | 456免费视频 | 成人观看 | 在线观看久久 | 久久久免费精品视频 | 久久久久久久久影院 | 99re亚洲国产精品 | www日韩精品 | 最近乱久中文字幕 | 免费中文字幕 | 国产免费亚洲高清 | 免费av小说| 色综合天天做天天爱 | 最新中文字幕 | 国产精品美女久久久久久久 | 国产亚洲字幕 | 免费看的毛片 | 久久精品电影院 | 国产精品嫩草55av | 久久99精品久久久久久久久久久久 | 日韩av资源站 | 亚洲午夜小视频 | 免费特级黄色片 | 激情小说久久 | 久久综合国产伦精品免费 | 国产又粗又猛又爽又黄的视频先 | 国产精品中文字幕在线观看 | 欧美性猛片, | 97视频在线看 | 99久久精品久久久久久清纯 | 国产美女久久久 | 日韩高清免费在线 | 亚洲精品在线观 | 色偷偷88888欧美精品久久久 | 六月激情丁香 | 五月天综合婷婷 | 伊人伊成久久人综合网站 | 日韩久久在线 | 日本福利视频在线 | aaa毛片视频| 亚洲综合丁香 | 久久深夜福利免费观看 | 在线观看国产成人av片 | 成人国产精品一区 | 99电影| 色综合a| av在线亚洲天堂 | 男女精品久久 | .国产精品成人自产拍在线观看6 | a天堂中文在线 | 丁香婷婷在线观看 | 97免费在线观看 | 国产第一福利 | 国产精品久久久久久久久久久久 | 激情狠狠干 | 国产黄色特级片 | 久久毛片高清国产 | 国内外成人在线 | 日日夜夜91 | 777视频在线观看 | a天堂中文在线 | 欧美一级视频免费看 | 91亚色在线观看 | 狠狠88综合久久久久综合网 | 日韩欧美精品在线 | 日本精品一区二区三区在线观看 | 国产资源av| 国产精品不卡一区 | 免费观看不卡av | 国产最新在线视频 | 亚洲aⅴ乱码精品成人区 | 久草在线免费看视频 | 奇米影视8888在线观看大全免费 | 九九热免费视频在线观看 | 91精品国| av在线等 | 日韩3区| 不卡视频一区二区三区 | 午夜手机电影 | 99热这里只有精品1 av中文字幕日韩 | 久久国产视频网 | 久久久网址| 91av在线免费 | 天天拍天天操 | 亚洲最新合集 | 色综合婷婷久久 | 日韩三级视频在线观看 | 日韩精品2区 | 黄色大片入口 | 国产九色在线播放九色 | 国产小视频在线免费观看视频 | 亚洲精品91天天久久人人 | 国产群p视频 | 黄色精品一区二区 | 久久情爱 | 成全免费观看视频 | 97国产超碰| 中文av在线天堂 | 一区二区激情视频 | 免费观看的av网站 | 日韩av播放在线 | 在线观看你懂的网站 | 国产69熟 | 亚洲情婷婷 | 欧美一级片播放 | 亚洲国产操 | 91精品免费看 | 亚洲h在线播放在线观看h | 精品国产一区二区三区男人吃奶 | 成人在线中文字幕 | 国产精品99久久久久久久久 | 亚洲一区二区观看 | 热re99久久精品国产99热 | 婷婷精品视频 | 福利精品在线 | 久久久久久久久久网站 | 久久99精品视频 | 日韩在线第一区 | 黄色av一区二区 | 国产黄免费 | 91福利社区在线观看 | 日韩电影精品一区 | 国产精品18videosex性欧美 | 午夜精品久久久 | 2017狠狠干 | 日韩精品不卡在线观看 | 99精品国产99久久久久久福利 | 久草在线中文888 | 欧美天天干 | 特级毛片爽www免费版 | 超碰在线人人97 | 成人免费网视频 | 国产成人精品女人久久久 | 中文字幕 二区 | 成人毛片a| 黄色片视频免费 | 中文字幕av免费观看 | 国产一区在线视频播放 | 亚洲精品1区2区3区 超碰成人网 | 国产精品自在线拍国产 | 99夜色| 国产精品麻豆91 | 亚洲自拍偷拍色图 | 成人免费观看完整版电影 | 国产资源在线免费观看 | 国产精品第54页 | 在线亚洲天堂网 | 五月婷婷丁香网 | 成人黄色片在线播放 | 午夜免费在线观看 | 国产午夜免费视频 | 最近日本字幕mv免费观看在线 | 国产女做a爱免费视频 | 2000xxx影视| 日本天天色 | 99久久一区 | 国产精品福利一区 | 亚洲精品国产品国语在线 | 国产精品久久婷婷六月丁香 | 亚洲一区视频免费观看 | 91欧美视频网站 | 国产精品久久久久久久久久三级 | 天天操综 | 精品久久久久久久久久久久久 | 色福利网 | 一级免费黄视频 | 日韩精选在线 | a黄色 | 深爱婷婷 | 亚洲成人黄色在线 | 男女拍拍免费视频 | 国产专区精品视频 | 最近最新中文字幕 | 婷婷丁香狠狠爱 | 色婷五月| 少妇性aaaaaaaaa视频 | 草久在线| 天堂va欧美va亚洲va老司机 | 天天操天天干天天插 | 99这里都是精品 | 日韩一级片大全 | 国产操在线 | 成人va视频 | 午夜av影院| 亚洲最大av网站 | 精品国产免费一区二区三区五区 | 99riav1国产精品视频 | 午夜精品剧场 | 少妇bbw搡bbbb搡bbb | 午夜久久久精品 | 天堂av网址 | 久久毛片网站 | 国产一级视频在线观看 | 成人久久久久久久久久 | 国际精品网 | 欧美一级网站 | 蜜臀久久99精品久久久酒店新书 | 深夜免费福利网站 | 黄色一级大片在线观看 | 国产一区二区久久 | 国产一区二区在线观看视频 | 国产传媒一区在线 | 97精品久久人人爽人人爽 | 久久精品中文字幕一区二区三区 | 国产精品丝袜久久久久久久不卡 | 成年人网站免费在线观看 | 热久久影视 | 国产一级二级av | 91精品久久久久久久久久久久久 | 密桃av在线 | 99热精品在线观看 | 亚洲国产精品一区二区久久,亚洲午夜 | 日韩城人在线 | 亚洲男男gⅴgay双龙 | 男女激情免费网站 | 视频在线亚洲 | 免费看久久久 | 特级西西人体444是什么意思 | 精品久久久久久久久久国产 | 久久精品综合 | 成年人视频在线观看免费 | 欧美日韩一区久久 | 亚洲国产成人精品久久 | 欧美91精品久久久久国产性生爱 | 天堂av在线网站 | www免费网站在线观看 | 国产麻豆精品久久 | 精品自拍av | 在线观看网站黄 | 久久这里有 | 狠狠狠狠狠狠天天爱 | 色婷婷欧美 | 久久99精品久久久久久久久久久久 | 黄色中文字幕在线 | 毛片网在线播放 | 国产一二三精品 | 日本中文字幕在线免费观看 | 国产短视频在线播放 | 怡红院久久| 中文字幕在线看视频 | 日本午夜在线观看 | 久久亚洲电影 | 欧美aaaxxxx做受视频 | 国产中文字幕亚洲 | 国产一二三区在线观看 | 人人超在线公开视频 | 免费视频a | 亚洲精品一区二区三区新线路 | 波多野结衣小视频 | 国产精品久久久久一区二区三区 | 欧美精品久久久久久久久老牛影院 | 夜夜操综合网 | 91麻豆精品国产91久久久更新时间 | 成人一级片免费看 | 亚洲精品视频在线免费 | 有码视频在线观看 | 天天操人| 麻豆免费看片 | 日日弄天天弄美女bbbb | 久久另类小说 | 成人国产精品免费 | 国产麻豆传媒 | www.久久婷婷 | 免费网站黄色 | 亚洲精品国偷自产在线91正片 | 亚洲精品乱码久久久久v最新版 | 五月天com| 精品久久久一区二区 | 999久久a精品合区久久久 | 爱射综合| 最新中文字幕在线播放 | 成人黄色毛片视频 | 久久伊人热 | 亚洲一级电影视频 | 国产高清视频在线播放一区 | 国产亚洲精品久久 | 超碰久热 | 国产一级二级在线 | 国产一二三四在线观看视频 | 久草在线观看视频免费 | 97视频免费观看 | 日本成人a | 国产精品久久 | 国产乱对白刺激视频在线观看女王 | 久久国产精品99久久久久 | 成人精品在线 | 中文字幕在线成人 | 九色精品免费永久在线 | 四虎在线永久免费观看 | 精品一区二三区 | 亚洲激情 欧美激情 | 女人18精品一区二区三区 | 国产亚洲激情视频在线 | 男女视频91 | 久久久久久久久黄色 | 中文字幕在线观看三区 | 一本一本久久aa综合精品 | 免费日韩在线 | 久久99久| 狠狠成人| 国产精品免费成人 | 天天干,夜夜操 | 日本久久久影视 | 婷婷久久亚洲 | 国产视频99 | 日韩av午夜在线观看 | 久久久久国产a免费观看rela | 中文字幕在线观看的网站 | 久久久久久久久久久久久影院 | 久草网视频在线观看 | 日韩精品视频久久 | 久久免费中文视频 | 日韩av成人在线观看 | 国产精品自在线拍国产 | 波多野结衣一区三区 | 亚洲成人黄色在线 | 韩日精品在线 | 亚洲春色成人 | 久久国产精品99国产 | 免费看的av片 | av 一区二区三区 | 五月丁香| 欧美另类性 | 久久爱导航| 91精品婷婷国产综合久久蝌蚪 | 国产又粗又硬又爽视频 | 日韩色一区二区三区 | 亚洲精品久久激情国产片 | 国产一区二区电影在线观看 | 五月天婷婷在线播放 | 日韩欧美在线视频一区二区三区 | 久久国产片 | 欧美久久久久久久 | 黄网站色视频 | 日b视频在线观看网址 | 成年人黄色在线观看 | 综合色在线观看 | 黄色小说18 | 国产精品美女久久 | 在线观看亚洲视频 | 亚洲精品国产拍在线 | 日韩激情片在线观看 | 婷婷综合导航 | 女人魂免费观看 | 俺要去色综合狠狠 | 久久久久成人精品亚洲国产 | 在线观看中文字幕视频 | 又色又爽又黄 | 国产高清一区二区 | 免费在线电影网址大全 | 日本精品久久久一区二区三区 | 久久99九九99精品 | 免费在线观看av不卡 | 久久免费片 | 欧美性天天 | 亚洲国产视频在线 | 亚洲无吗天堂 | 又色又爽又黄高潮的免费视频 | 欧美另类v | 中文字幕在线不卡国产视频 | 日韩天天干 | 国产精品成人品 | 在线观看日韩av | 五月天欧美精品 | 久久国产露脸精品国产 | 久久久蜜桃 | 久久精品电影 | 在线中文字幕av观看 | 久久久免费av | 久久人人爽爽 | 在线看片中文字幕 | 欧美另类v| 久久久久久久福利 | 在线观看中文字幕2021 | 天天操月月操 | 亚洲成av人片在线观看www | 国产精品婷婷午夜在线观看 | 久久久久欠精品国产毛片国产毛生 | 在线观看黄色 | 午夜精品久久久久久久久久久久久久 | 91成人在线视频观看 | 操操日 | 亚洲三级在线 | 久久狠狠婷婷 | 伊人五月天婷婷 | 97成人精品视频在线播放 | 91在线看视频免费 | 亚洲无毛专区 | 国产精品久久久免费看 | 精品自拍网 | 日韩专区视频 | 国产 日韩 中文字幕 | 亚洲福利精品 | 欧美日一级片 | www.色午夜,com | 91免费观看视频网站 | 狠狠夜夜 | 久久成人精品电影 | 国产黄免费看 | 99热99re6国产在线播放 | 福利视频一区二区 | 精品五月天 | 啪啪肉肉污av国网站 | 婷婷丁香花 | 午夜三级影院 | 免费在线激情电影 | 国产91欧美 | 久久情爱 | 9999国产精品 | 国产一区二区不卡在线 | 国产精品美女 | 日本午夜免费福利视频 | 国产群p视频 | 国产一区二区视频在线播放 | 欧美亚洲国产精品久久高清浪潮 | 亚洲电影免费 | 九九99靖品 | 中文字幕国产在线 | 亚洲国产成人精品久久 | 国产91丝袜在线播放动漫 | 亚洲性少妇性猛交wwww乱大交 | 成人黄色在线 | 午夜精品福利一区二区 | 中文一区在线 | 成人免费视频网址 | 高潮久久久久久 | 一区二区三区日韩在线观看 | 精品在线视频一区 | 麻豆91精品91久久久 | 九色在线视频 | 肉色欧美久久久久久久免费看 | 亚洲va男人天堂 | 国产小视频在线看 | 手机看国产毛片 | 亚洲人成网站精品片在线观看 | 九九免费在线视频 | 亚洲日本韩国一区二区 | 亚洲精品国产精品久久99热 | 免费国产黄线在线观看视频 | 国产福利精品在线观看 | 国产无套精品久久久久久 | 国产自在线观看 | 在线播放一区二区三区 | 国产精品岛国久久久久久久久红粉 | 黄色av网站在线观看免费 | 美女黄视频免费 | 天天操天天操天天操天天操天天操天天操 | 黄色亚洲免费 | 欧美-第1页-屁屁影院 | 久久电影网站中文字幕 | 天天艹天天爽 | 欧美国产高清 | 久久久久久久99精品免费观看 | 免费在线黄网 | 五月开心婷婷 | 亚洲国产色一区 | 色88久久| 精品一区二区6 | 国产午夜在线观看视频 | 日本三级人妇 | 久久深夜 | 亚洲人视频在线 | 亚洲激情在线播放 | 一区二区三区在线视频111 | 天天做天天爱天天爽综合网 | 成人在线免费视频 | 91精品久久久久久粉嫩 | 久草www | 久热只有精品 | 国产亚洲欧美精品久久久久久 | 精品一区中文字幕 | 国产精品99久久久精品免费观看 | 中文字幕色婷婷在线视频 | 亚洲精品资源在线观看 | 六月激情久久 | 亚洲春色成人 | 尤物一区二区三区 | 一级黄色大片在线观看 | 四虎影视4hu4虎成人 | 一个色综合网站 | 一本大道久久精品懂色aⅴ 五月婷社区 | 特级毛片网站 | 在线观看色视频 | 丁香导航| 久久久免费 | 亚洲精品免费观看视频 | 91精品国产91| 久久香蕉电影 | 久要激情网 | 500部大龄熟乱视频 欧美日本三级 | 97超碰在线资源 | 亚洲精品一区二区在线观看 | 亚洲午夜精品久久久久久久久久久久 | 男女精品久久 | 免费观看丰满少妇做爰 | 国产免费三级在线观看 | 99精品久久只有精品 | 1区2区视频| 天天色天天色天天色 | 国产色网站 | 国产亚洲在线视频 | 欧美小视频在线观看 | 国产高清视频免费在线观看 | 在线看片91| 黄色小说视频在线 | 不卡精品 | 99国产一区二区三精品乱码 | 国产91亚洲精品 | 日韩免费在线网站 | 日韩精品免费在线播放 | 午夜婷婷在线观看 | 日日躁天天躁 | www.神马久久 | 99re久久资源最新地址 | 黄色特级一级片 | 99久久久国产免费 | 久久国产美女 | 激情综合五月 | 国产一区在线免费观看视频 | 曰本免费av | 国产黄色精品在线观看 | 精品在线观 | 国产电影黄色av | 国产精品国产三级国产aⅴ9色 | av网站免费线看精品 | 色婷婷久久久 | 久草免费在线视频 | 国产精品精品国产色婷婷 | 在线观看精品黄av片免费 | 成人在线观看资源 | 97成人免费视频 | 日韩欧美视频免费观看 | 97超碰在线资源 | 国产精品手机在线 | 色婷婷狠狠五月综合天色拍 | 久久综合久久综合久久 | 黄色免费网站大全 | 狠狠狠狠狠操 | 在线观看黄色大片 | 字幕网资源站中文字幕 | 国产午夜精品久久 | 中文字幕在线观看免费 | 久久午夜精品 | 成人av在线直播 | 精品国模一区二区三区 | 一区二区 久久 | 91亚洲精| av解说在线观看 | 日日夜夜狠狠干 | 91视频 - v11av| 日日夜夜天天 | 国产精品久久久99 | 精品在线观看一区二区 | 国产免费不卡 | 久久久免费 | 日日干av | 婷婷综合亚洲 | 在线亚洲高清视频 | 日韩精品中文字幕久久臀 | 久久草av| 在线免费黄色 | 国内三级在线 | 日韩电影精品一区 | 激情视频免费观看 | 六月丁香在线视频 | 国产经典三级 | 麻豆91在线看 | 在线 日韩 av| 国产一级久久久 | 国产在线中文字幕 | 人人网av | 成年人精品 | 性色大片在线观看 | 丁香婷婷综合色啪 | 久久福利国产 | 亚洲成人黄 | 亚洲一区久久 | 激情片av | 成人中心免费视频 | 欧美一进一出抽搐大尺度视频 | 久久免费电影网 | 黄色一级在线观看 | av在线播放快速免费阴 | 91mv.cool在线观看 | 91在线视频免费播放 | 国产精品黄色影片导航在线观看 | 日韩在线三级 | 超碰在线个人 | 91九色视频在线观看 | 视频高清 | 国产精品午夜在线 | 韩日在线一区 | 色爱区综合激月婷婷 | 欧美日韩一区二区三区在线免费观看 | 精品一区二区免费在线观看 | 中文字幕网站视频在线 | 亚洲精品五月 | 婷婷综合网 | 美女国内精品自产拍在线播放 | 激情av在线播放 | 国产一区二区三区免费在线 | 在线免费观看羞羞视频 | 国产婷婷精品av在线 | 日韩在线视频免费播放 | 91精品国产福利 | 国产三级午夜理伦三级 | 国模精品在线 | 成人毛片一区二区三区 | 91色亚洲| 成人av资源站| 国产黄影院色大全免费 | 欧美精品久久久久久久久久白贞 | 中文字幕一区二区三区四区久久 | 99r在线精品| 精品久久久久久久久久久院品网 | 日韩 精品 一区 国产 麻豆 | 深夜激情影院 | 在线视频婷婷 | 一级黄色片在线播放 | 日日夜夜精品 | 日本黄色大片儿 | 天天综合网在线观看 | 久久综合精品一区 | 日日插日日干 | 精品99999 | 久久久伊人网 | 国产在线播放不卡 | 久久69精品| 久产久精国产品 | 国产高清免费在线播放 | 欧美日韩免费视频 | 天堂va在线高清一区 | 91av视频导航| 毛片播放网站 | 在线精品亚洲一区二区 | 片网站 | 国产日韩欧美在线看 | 国产麻豆精品一区二区 | 久久er99热精品一区二区 | 国产在线视频资源 | 天天干天天操天天做 | 成人九九视频 | 免费高清在线视频一区· | 欧美日韩免费在线观看视频 | 91视频久久久 | 日韩欧美一区二区三区黑寡妇 | 久久综合欧美精品亚洲一区 | 久久久久久久久久久久久国产精品 | 久久亚洲私人国产精品va | 婷婷六月天在线 | 狠狠色丁香久久婷婷综 | 99精品国产一区二区三区麻豆 | 国产又黄又爽无遮挡 | 免费视频91| 国产黄色片免费在线观看 | 亚洲日本激情 | 国产成人福利片 | 久久96国产精品久久99软件 | 久久中文精品视频 | 黄色影院在线观看 | 欧美精品在线视频观看 | a在线免费 | .国产精品成人自产拍在线观看6 | 久久综合狠狠综合久久综合88 | 在线电影日韩 | 免费久久99精品国产 | 中文视频在线播放 | 国产小视频福利在线 | 二区精品视频 | 亚洲精品合集 | 日韩性色 | 国产精品久久久免费 | 99精品久久精品一区二区 | 国产精品人人做人人爽人人添 |