字符串的創建:
第一種方式:
char a[] = "lanOu";
initWithUTF8String:將C語言中的字符串轉換為OC重的字符串.
NSString *string1 = [[NSString alloc]initWithUTF8String:a];
NSLog(@"%@",string1);
第二種方式: 字面量(最常用)
NSString *string3 = @"lanOu3g";
NSLog(@"%@",string3);
第三種方式:
NSString *string2 = [[NSString alloc]initWithFormat:@"hello lanOu"];
NSLog(@"%@",string2);
作用1:創建一個普通的字符串對象.
作用2:將別的類型的對象轉換成字符串類型的對象.
作用3:字符串拼接.
字符串長度
NSUInteger length = string.length;
獲取字符串中的字符
NSString *string = [NSString stringWithFormat:@"lanOuKeJi"];
unichar c = [string characterAtIndex:2];
NSLog(@"%c",c);
判斷字符串是否相等
if ([string1 isEqualToString:string2])
下面的判斷的是字符串的地址.
if (string1 == string2)
字符串比較
NSString *string1 = @"laowang";
NSString *string2 = @"yali";
NSComparisonResult result = [string1 compare:string2];
NSLog(@"%ld",result);
switch (result) {
case NSOrderedAscending:
NSLog(@"前小后大");
break;
case NSOrderedDescending:
NSLog(@"前大后小");
break;
default:
NSLog(@"相等");
break;
}
獲取子字符串
NSString *string = @"lanOuDaLian";
截取下標為5之前的字符(不包含5).
NSString *string1 = [string substringToIndex:5];
NSLog(@"%@",string1);
截取下標為5之后的字符(包含5).
NSString *string2 = [string substringFromIndex:5];
NSLog(@"%@",string2);
截取下標從3開始長度為4的字符串
NSString *string3 = [string substringWithRange:NSMakeRange(3, 4)];
NSLog(@"%@",string3);
字符串拼接
NSString *string2 = [string stringByAppendingString:@"藍歐"];
NSString *string3 = [string2 stringByAppendingFormat:@"%d",1233];
字符串替換
NSString *string = @"lanoudalian";
前面的a 是我想要替換的字符串,那么后面的b 是我想要替換成的字符串
/*
NSString *string2 = [string stringByReplacingOccurrencesOfString:@"a" withString:@"b"];
NSLog(@"%@",string2)
*/
字符串類型轉換成其他類型
將字符串轉換成長整型
NSInteger a = [string1 integerValue];
將字符串轉換成浮點型
NSString*string2 = @"18.9";
float b = [string2 floatValue];
NSString *string3 = @"18";
int c = [string3 intValue];
大小寫轉換
(1)全部大寫
NSString *upperString = [string uppercaseString];
(2)全部小寫
NSString *lowerString = [string lowercaseString];
(3)首字母大寫
NSString *capitalStr = [string capitalizedString];
判斷開頭結尾
//判斷是否以xx開頭
BOOL isPrefix = [string hasPrefix:@"xx"];
判斷是否以xx結尾
BOOL isSuffix = [string hasSuffix:@"xx"];
可變字符串
NSMutableString *mStr = [[NSMutableString alloc]initWithFormat:@"dalian"];
NSLog(@"%@",mStr);
在dalian之后拼接上lanou
[mStr appendFormat:@"lanou%d",1];
NSLog(@"%@",mStr);
[mStr appendString:@"heihei"];
NSLog(@"%@",mStr);
插入字符串
[mStr insertString:@"hehe" atIndex:0];
NSLog(@"%@",mStr);
刪除字符串
[mStr deleteCharactersInRange:NSMakeRange(3, 2)];
NSLog(@"%@",mStr);
替換字符串
[mStr replaceCharactersInRange:NSMakeRange(3, 2) withString:@"123"];
NSLog(@"%@",mStr);
重置字符串
[mStr setString:@"heihei"];
NSLog(@"%@",mStr);
數組
系統提供的數組類:類似于c語言中的數組的功能
數組是一個大容器,數組中可以儲存不同類型的對象,但必須要保證數組中儲存的都是對象.
oc中提供了兩類數組:一類是NSArray(不可變數組) 一類是NSMutableArray(不可變數組)
可變與不可變的區別:可變就意味著可以對原有對象進行操作,不可變就意味著一旦創建,內容就不可改變.
(1)使用初始化方法創建數組
(2)使用便利器構造器方法創建數組
(3)字面量
當元素為空的時候,使用firstObject以及lastObject可以保證程序安全,不會崩潰,返回值為nil,但使用objectAtIndex:時,如果數組為空,則程序崩潰.
查找xx 對應的下標
NSUInteger index = [nameArrayOne indexOfObject:@"xx"];
NSLog(@"%lu",index);
判斷數組中是否包含某個對象
BOOL isTrue = [nameArrayOne containsObject:@"xx"];
NSLog(@"isTrue == %d",isTrue);
判斷兩個數組是否相等
if ([string1 isEqualToString:string2])
NSArray和NSString之間的轉換
NSString *string = @"www.lanou3g.com";
NSArray *array = [string componentsSeparatedByString:@"."];
NSLog(@"%@",array);
Capacity容量
一下三種方式都是創建一個可變的空數組
NSMutableArray *myArray = [[NSMutableArray alloc]initWithCapacity:1];
NSMutableArray *youArray = [NSMutableArray arrayWithCapacity:1];
NSMutableArray *bigArray = [NSMutableArray array];
增加一個數據
addObject: 在數組的最后面添加
[bigArray addObject:@"lanou"];
在指定位置插入一個元素
[bigArray insertObject:@"heihei" atIndex:0];
刪除
1.刪除指定元素(只要是這個對象,有多少刪多少)
[bigArray removeObject:@"beijing"];
2
[bigArray removeObjectAtIndex:0];
替換
[bigArray replaceObjectAtIndex:1 withObject:@"heihei"];
交換指定位置的兩個元素
[bigArray exchangeObjectAtIndex:0 withObjectAtIndex:1];
刪除全部
[bigArray removeAllObjects];
數組小結:數組是用來管理一組有序的元素的集合,必須保證數組中存放的都是對象,而且數組中可以存放相同元素.
字典
字典:用來存儲具有一一對應關系的數據,本質上也是一個大容器
字面量
NSDictionary *dic2 = @{@"name":@"xiaoyali",@"sex":@"nan"};
求字典的元素個數
NSUInteger count = dic2.count;
將字典中所有的key放到了一個數組中
NSArray *keys = dic2.allKeys;
將字典中所有的value放到一個數組中
NSArray *values = dic2.allValues;
字典本身是無序的.
可變字典
創建對象
NSMutableDictionary *dic = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"zhangsan",@"name",@"nan",@"sex", nil];
字典增加一個元素
[dic setObject:@"18" forKey:@"age"];
移除元素
[dic removeObjectForKey:@"city"];
移除所有元素
[dic removeAllObjects];
集合
特點:無序性,互異性(不顯示重復的元素),本質上是一個大容器.
NSSet *mySet = [[NSSet alloc]initWithObjects:@"aa",@"bb",@"cc",@"dd",@"aa",@"bb",@"bb",@"cc", nil];
元素的個數
NSUInteger count = mySet.count;
獲取集合中的元素
NSString *string1 = [mySet anyObject];
將集合中的元素取到一個數組中
NSArray *myArray = mySet.allObjects;
可變集合
NSMutableSet *mySet = [[NSMutableSet alloc]initWithObjects:@"aa",@"bb", nil];
添加元素
[mySet addObject:@"cc"];
刪除元素
[mySet removeObject:@"aa"];
小結:
數組,字典,集合的區別:
相同點:都是oc中的容器類,可以儲存多個元素,但是元素必須都是對象,不限制對象的類型.
不同點:
1.使用場景:
數組:用來管理一組有序的元素的集合.
字典:用來管理一組具有一一對應關系的數據的集合.
集合:用來管理一組無序,并且具有互異性的元素的集合.
2.特點:
數組:有序,并且元素可以重復使用.
字典:無序,key-value是字典中的一個元素,key是唯一的,一個key只能對應一個value,但是一個value可以對應多個key.
集合:無序,元素具有互異性.
3.取值方式:
數組:通過下標獲取元素.
字典:通過key值,獲取元素.
集合:angObject? 獲得一個數組? forin 遍歷
繼承
繼承的優勢:其實就是省代碼,曾強程序的可拓展性和可修改性.
1.繼承的上層:父類,繼承的下層:子類
2.繼承具有單向性:只有單向傳遞,如果A作為B的父類,則A就不能作為B的子類.
3.繼承具有傳遞性:C繼承于B,B繼承于A,那么C具有A和B的所有內容.
4.子類繼承父類的全部實例變量和方法.
5.子類從父類繼承過來的內容就是自己的,只不過來源于父類.
原則:當多個類中出現部分相同的特征和行為時,可以將相同部分寫成一個父類,其他類繼承即可.
封裝
是面向對象方法的重要原則,就是把對象的屬性和操作(或服務)結合為一個獨立的整體,并盡可能隱藏對象的內部實現細節
封裝途徑
封裝就是將抽象得到的數據和行為(或功能)相結合,形成一個有機的整體,也就是將數據與操作數據的源代碼進行有機的結合,形成“類”,其中數據和函數都是類的成員。
封裝的目的是增強安全性和簡化編程,使用者不必了解具體的實現細節,而只是要通過外部接口,以特定的訪問權限來使用類的成員。
封裝在網絡編程里面的意思, 當應用程序用TCP傳送數據時,數據被送入協議棧中,然后逐個通過每一層直到被當作一串比特流送入網絡,其中每一層對收到的數據都要增加一些首部。
原則
1把盡可能多的東西藏起來.對外提供簡捷的接口。
2把所有的屬性藏起來。
多態
1.同一操作作用于不同的對象,可以有不同的解釋,產生不同的執行結果。在運行時,可以通過指向基類的指針,來調用實現派生類中的方法。
2.C++中,實現多態有以下方法:虛函數,抽象類,覆蓋,模板(重載和多態無關)。
3.OC中的多態:不同對象對同一消息的不同響應.子類可以重寫父類的方法
4.多態就是允許方法重名 參數或返回值可以是父類型傳入或返回。
代理
第一步:聲明協議
第二步:聲明代理
第三步:代理人執行協議方法
第四步:簽訂協議
第五步:成為代理人
第六步:實現協議方法