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