block修改变量
block可以修改全局变量,直接修改其地址中的值
block修改__block修饰的局部变量时,会先将该变量复制一份到自己的堆空间,下面的哥们在使用这个变量,实际上使用的是block复制过来这个变量
.h中协议的声明
在.h中使用@protocol,.h文件不知道协议中都有哪些方法,所以必须在.m中#import协议。@protocol如果修改,则不需要重新编译,提高了效率。
通常协议都用#import,类用@class
NSString
NSComparisonResult 对象方法 compare,挨个字符比较,比较的是ASCii码值
NSCaseInsensitiveSearch:不区分大小写,默认是区分大小写
如果有多个比较条件,加 ‘ | ’ 然后加比较条件
我们用==比较时,比较的是地址而不是值,所以比较字符串时
尽量用compare而不是==
isEqualToString,比较的是值,如果只是简单的比较值,用isEqualToString
前缀判断:对象方法,hasPrefix:@“”;
返回值是个Bool类型
后缀判断:对象方法,hasSuffix:@“””;
返回值是个Bool类型
查找字符串,str1在str中的位置
从loc开始,长度为Length的范围,正向检索
如:NSRange range = [ str range OfString:str1 ];
range.location与range.length 可通过option加一个NSBackwardSearch: 方法,从后往前搜
range可以转成一个字符串,通过NSStringFromRange(range);
转换过来的是location与length值
NSRange range =NSMakeRange(3,5);
NSRange range = {.location=3,.length=5};
与转换成字符串的结果都是{3,5}
找得到,返回位置和长度
找不到,返回的位置location是NSNotFound,是一个最大值,长度是0
所以可通过location的最大值来判断是否成功
截取字符串
从指定位置开始截取到最后,包含指定的位置(指下标)
如:NSString *str = [ str substringFromIndex:5];
从开头截取到指定位置,不包含指定的位置(指下标)
如:NSString *str2 =[str substringToIndex:7];
截取指定范围
如:NSString *str3 = [str substringWithRange:NSMakeRange(4,6)];
把字符串str中的a用b来替换
如:NSString *str4=[str stringByReplacingOccurrencesOfString:@“a”withString:@“ b”];
获取字符串长度
字符串.length方法
获取每个字符:characterAtIndex
将字符串转化为int类型,对象方法 intValue
字符串转基本数据类型:你要转成啥类型,就啥Value(对象方法),除了字符串转char * ,用UTF8String方法(对象方法)
char *转成字符串型就用[NSString stringWithUTF8String:char *s],返回值为字符串
对象方法,[stringBytrimmingCharactersInSet:[NScharacterSet whitespaceCharacterSet]],最后一个参数可以修改。
NSMutableString,是NSString的子类
NSString是个不可变字符串,一旦创建成功,其大小地址内容就不会改变。
NSMutableString是一个可变字符串,地址不变,大小内容可变
往可变字符串追加不改变原有值:[string appendString:@“”];没有返回值
按照某种格式追加,[str appendFormat:%d@“”,int];
rangeOfString:@“” ;对象方法,找到字符串,返回值为字符串
selectCharacterInRange:range1;删除字符串range1 对象方法,无返回值
insertString:要插入的字符串,atIndex:插在哪
这两个方法往往搭配使用
[str replaceCharactersInRange:NSMakeRange(0,2) withString:@“”];
用字符串替换这个范围内的字符串
注意:用@“”直接创建字符串时,创建的是不可变字符串
开发中大部分用的都是NSString
NSArray
NSArray是一个类,OC中的数组,尽量用NSSArray代替C语言的数组
只能存放OC中的任意对象
NSArray是不可变的数组,一旦初始化完,长度内容就固定了
可以用%@ 直接打印数组,系统会自动遍历数组,并把所有元素打印出来,元素以nil作为结束
常见用法(对于字符串数组而言):
1.获取元素个数
通过count方法获得数组的长度,返回值是无属性的Int值
2.获得指定位置的元素
最简单:NSString *str = arr[i];
[arr objectAtIndex:i];返回值是个字符串
3.判断数组中是否有haha这个元素
[arr containsObject:@“haha”]; 返回值是BOOL类型
4.获得第一个元素与最后一个元素
[arr firstObject];与[arr lastObject];
5.获得元素@“haha”的角标
[arr indexOfObject:@“haha”];返回值是个无符号int型,如果找不到返回NSNotFound,找的到返回角标
简写方法:
数组的创建:@[];
NSArray *arr = @[@“”,@“”…];
角标遍历:用普通for循环遍历
高级for循环遍历遍历:for(NSString *str in arr){ };把arr数组里的每个值都用一个str接受
block遍历:对象方法,输入en找有block的方法。无返回值,有三个参数
第一个参数:id obj 代表数组每一个元素
第二个参数:NSUInteger idx 代表是对应的角标
第三个参数:BOOL* stop 用来控制循环结束的
写入文件:
[arr writeToFile 第一个参数是地址,第二个参数:YES];返回值是BOOL类型,代表是写入成功
读取文件:
[NSSArray arrayWithContentsOfFile:路径];返回值为读取到的内容
把数组元素连接成一个字符串:
[arr componentsJoinedByString:@“ ”]; 返回值是个字符串,参数是用来连接元素的字符串
将字符串切割成数组:
[arr componentsSeparatedByString:@“”];返回值是个数组,参数是用来分割的
数组的追加,全都毫无返回值:
[arr addObjectsFromArray:arr2]; 将数组2拷贝到数组1的后面
[arr insertObjects:@“” AtIndex:int];指定角标插入字符串
[arr removeLastObjects]; 删除单个最后元素
[arr removeAllObjects]; 删除全部元素
NSDictionary
用来存储元素的,里面的每个元素都是以键值对的形式存在
一个键对应一个值,根据键找到值
存储是无序的
快速创建:
格式:@{ };
NSDictionary *dic = @{@“asd”:@“qwe”,@“zxc”:@“cvb ” };
注意:字典中,键不能重复,值可以重复
增强for循环遍历得到的是键,可通过objectForKey: 参数是键
dict[key];得到字典中key键的值,返回值为值得类型
block遍历,三个参数 Key:键 Obj:值 *stop:控制停止
输入enum找到block那个
NSMutableDictionary
添加时,setObject:@“” forKey:@“”; 对象方法,无返回值
等同于dict[@“”]=@“”;
删除时,removeXXX,可根据键来删除,也可全部删除