1. 【OC/2-1】字符串處理
-
NSString(具有恒定性及共享機制)
NSMutableString(可變)
- 初始化
NSString *str = @"Hello World!";
NSString *str = [[NSString alloc]initWithCString:"Hello World!"
encoding:NSUTF8StringEncoding];
NSString *str = [NSString stringWithCString:"Hello World!"
encoding:NSUTF8StringEncoding];
NSMutableString *mustr = [NSMutableString stringWithCapacity:100];
- 字符串長度
str.length
[str length]
- 判斷相等
str1 isEqualToString: str2 //指針指向的【字符串】是否相等
str1 == str2 //【指針】是否指向同一對象劝篷,【引用】是否相等
- 返回字符串中第 i 個字符
[str characterAtIndex: i]
- 大小寫
str = str.uppercaseString; //大寫
str = str.lowercaseString; //小寫
str = str.capitalizedString; //首字母大寫
- 在str1中查找str2是否存在
/**********
typedef struct _NSRange {
unsigned int location; //范圍起始位置
unsigned int length; //范圍內(nèi)所含元素的個數(shù)
}NSRange;
**********/
if ([str1 rangeOfString:str].location != NSNotFound) {
//找到了
}
/*
NSRange range = [str1 rangeOfString:@"Hello"];
range.location
range.length
*/
- 截取子串
substringToIndex //從第一個字符串開始截取,到指定長度位置,但是不包括該指定位置位置字符串
substringFromIndex //從指定位置開始截取字符串到最后蛔钙,所截取位置包含該指定位置
substringWithRange //傳入NSRange類型,表示從哪里開始截取和長度兼贡,返回字符串類型。
- 判斷前綴是否存在
hasPrefix
- 格式化(?)
NSString* format = [NSString stringWithFormat: @"[%d, %d]", 100, 200];
- NSMutableString的增刪改查方法
[mustr3 appendString:@"Hello Objective"];
[mustr3 insertString:@"-C" atIndex:mustr3.length];
[mustr3 setString:@"Hi Objective"];
NSRange replaceRange = NSMakeRange(0, 2);
[mustr3 replaceCharactersInRange:replaceRange withString:@"Hello"];
NSRange deleteRange = NSMakeRange(5, 10);
[mustr3 deleteCharactersInRange:deleteRange];
2.【OC/2-2】集合類型
NSArray & NSMutableArray
- 初始化
NSArray *array = [NSArray arrayWithObjects:@"Shanghai",@"Beijing", nil];
NSArray *array = [[NSArray alloc] initWithObjects:@"Shanghai",@"Beijing", nil];
NSArray *array = @[@"Shanghai",@"Beijing"];
NSMutableArray *muArray=[NSMutableArray arrayWithObjects:p1,p2,p3,p4, nil];
//nil為空
- 元素個數(shù)
array.count
- 打印數(shù)組
NSLog(@"array: %@" ,array);
- 數(shù)組元素只能是對象
/*不能直接放基本數(shù)值類型别厘,使用NSNumber將NSInteger包裝為對象*/
NSNumber *numberObject1=[NSNumber numberWithInteger:300];
NSNumber *numberObject2=@300u;//使用字面常量初始化
/*使用NSValue將struct包裝為對象*/
Point point;
point.h=100;
point.v=200;
NSValue *pointObject=[NSValue value:&point withObjCType:@encode(Point)];
/*不能存放nil*/
NSNull* nullValue=[NSNull null];
- NSArray【不可】改變元素長度以及元素指針,【可以】改變指針指向的內(nèi)容
- 快速遍歷
for (類 對象 in array)
- 查找元素
-(NSUInteger)indexOfObject:(id)anObject; //查找對象(isEqual)
-(NSUInteger)indexOfObjectIdenticalTo:(id)anObject; //查找指針
- 排序(不改變原有數(shù)組,返回的是新數(shù)組)
NSArray* sortArray = [array sortedArrayUsingSelector:@selector(compare:)];
- NSMutableArray修改元素
[muArray addObject:p];
[muArray removeObjectAtIndex:2];
[muArray insertObject:p atIndex:1];
muArray1[0]=p;
NSSet & NSMutableSet
特點:無序集合,對象唯一眯娱,hash實現(xiàn)查找更快
NSDictionary & NSMutableDictionary
key-value對
- 初始化(注意KV位置是相反的)
NSDictionary *dictionary1 = @{
@"Shanghai" : p1,
@"Beijing" : p2,
@"New York" : p3,
@"Paris" : p4
};
NSMutableDictionary *dictionary2 =
[NSMutableDictionary dictionaryWithObjectsAndKeys:
p1, @"Shanghai",
p2, @"Beijing",
p3, @"New York",
p4, @"Paris",
nil];
- 根據(jù)關(guān)鍵字查值
[dictionary1 objectForKey:@"Beijing"]
dictionary1[@"Shanghai"]
- 快速遍歷
for(NSString* key in dictionary1) {
id object=dictionary1[key];
NSLog(@"key:%@, object:%@", key, object);
}
- 修改值
[dictionary2 setObject:p5 forKey:@"London"];
[dictionary2 removeObjectForKey:@"Shanghai"];
3. 【OC/2-3】ARC
自動釋放池 @autoreleasepool
- 默認(rèn)主線程自動調(diào)用嘁信,創(chuàng)建新線程時需要自己再創(chuàng)建
- 可以嵌套使用
4. 【OC/2-4】類型合同:協(xié)議
@protocol
- 定義時:寫在.h中穿剖,不需要寫實現(xiàn)
使用時:方法在.m中實現(xiàn),屬性要在.h中重新聲明,@require方法一定要實現(xiàn)誓军,@optional方法可選;【格式】@interface 子類: 父類 <協(xié)議> - 可作為聲明類型
實現(xiàn)了協(xié)議的類的對象可以傳給一個聲明類型為協(xié)議的參數(shù) - 不確定對象類型是否遵循協(xié)議時
if ([obj conformsToProtocol:@protocol(AProtocol)]) {
//遵守了協(xié)議
}
- 協(xié)議可繼承
5. 【OC/2-5】類別與擴展
類別
- 創(chuàng)建新文件實現(xiàn)
命名規(guī)范:類+類別(首字母大寫) - 不可添加實例變量、屬性
擴展
- 定義和實現(xiàn)均和原來的類寫在一起(.m文件中)
-
外部不允許訪問(私有)