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; //范围内所含元素的个数
}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为空
- 元素个数
array.count
- 打印数组
NSLog(@"array: %@" ,array);
- 数组元素只能是对象
/*不能直接放基本数值类型,使用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【不可】改变元素长度以及元素指针,【可以】改变指针指向的内容
- 快速遍历
for (类 对象 in array)
- 查找元素
-(NSUInteger)indexOfObject:(id)anObject; //查找对象(isEqual)
-(NSUInteger)indexOfObjectIdenticalTo:(id)anObject; //查找指针
- 排序(不改变原有数组,返回的是新数组)
NSArray* sortArray = [array sortedArrayUsingSelector:@selector(compare:)];
- NSMutableArray修改元素
[muArray addObject:p];
[muArray removeObjectAtIndex:2];
[muArray insertObject:p atIndex:1];
muArray1[0]=p;
NSSet & NSMutableSet
特点:无序集合,对象唯一,hash实现查找更快
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];
- 根据关键字查值
[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
- 默认主线程自动调用,创建新线程时需要自己再创建
- 可以嵌套使用
4. 【OC/2-4】类型合同:协议
@protocol
- 定义时:写在.h中,不需要写实现
使用时:方法在.m中实现,属性要在.h中重新声明,@require方法一定要实现,@optional方法可选;【格式】@interface 子类: 父类 <协议> - 可作为声明类型
实现了协议的类的对象可以传给一个声明类型为协议的参数 - 不确定对象类型是否遵循协议时
if ([obj conformsToProtocol:@protocol(AProtocol)]) {
//遵守了协议
}
- 协议可继承
5. 【OC/2-5】类别与扩展
类别
- 创建新文件实现
命名规范:类+类别(首字母大写) - 不可添加实例变量、属性
扩展
- 定义和实现均和原来的类写在一起(.m文件中)
-
外部不允许访问(私有)