NSRange,NSString,NSArray,NSSet,NSDictionary
1,NSRange
1 初始化方式(1),用一个函数初始化,类似的NSSize,NSRect,NSPoint也是这样赋值的
NSRange range = NSMakeRange(NSUInteger loc,NSUInteger len)
(2),直接用大括号赋值
NSPoint p1 =NSMakePoint(10,10);
NSPoint p2 =NSMakePoint(20,20);
NSRect r1 ={{0,0},{100,90}};
NSRect r2 ={p1,p2};
2,结构体常应用举例
(1),rangeOfString:(NSString *) // NSString对象方法 返回一个NSRange类型的结构体
* 查找某个字符串在str中的范围
* 如果找不到,length=0,location =NSNotFound==-1,NSNotFound是一个枚举
(2),将结构体转为字符串函数
NSString *string = NSStringFromSize(结构体名称);
(3),常用的固定结构体const
CGPointZero ==CGPointMake(0,0)
(4),判断(BOOL)类型的函数
BOOL CGPointEqualToPoint(CGPoint,CGPoint);// 比较两个点是否相同
BOOL CGRectContainsPoint(CGRect,CGPoint);// 判断一个点是否在Rect范围内
(5),使用CG前缀的函数的前提是添加CoreGraphics框架
2,NSString
原理,存放字符串的类
1,NSString的创建
(1),最简单的方式
NSString *s = @"jack";
(2),格式创建
NSString *s = [[NSString alloc] initWithFormat:@"age is %d",10];
(3),c字符串转化为OC字符串
NSString *s = [[NSString alloc] initWithUTF8String:"jack"];
(4),OC字符串转化为c字符串
const char *cs = [s UTF8String];
(5),从文件中创建字符串
// NSUTF8StringEncoding 用到中文就可以用这种编码
NSString *s = [[NSString alloc] initWithContentsOfFile:@"路径"encoding:NSUTF8StringEncoding error:nil]
// URL:资源路径
NSURL *url = [NSURL alloc] initWithString:@"file:///Users/apple/Desktop/1.txt"];
NSString *s = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]
(6),类方法
// 一般都会有一个类方法跟对象方法配对,一般一类名开头
[NSString stringWithFormat@""];
(7),追加,附加到另一个字符串后面创建一个新的字符串
NSString *newstring = [s stringByAppendString:@"11 12"];
2,NSString方法举例
(1),字符串的导出
// atomically 参数如果为YES的话,代表原子性,比较安全,字符串导入失败的时候,文件不会创建、
[@"Jack\njack" writeToFile:@"文件路径" atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSURL *url = [NSURL fileURLWithPath:@"file:///Users/apple/Desktop/1.txt"];
[@"Jack\njack" writeToURL:@"文件路径" atomically:YES encoding:NSUTF8StringEncoding error:nil];
(2),length 计算字数包括空格,不是计算字符数。
(3),计算字符串s在调用这个方法的字符串中的位置。
rangOfString:@"s"
(4),将字符串内容以字符c为分割点切割
[s componentSeparatedByString:@"c"];
(5),经字符串转换为(int,double,...)
int i = [a intValue];
int i = [a doubleValue];
3,NSMutableString
(1),NSMutaableString的创建
NSMutableString *s = [NSMutableString stringWithFormat:@"age is 10"]
(2),追加,附加(append)内容到字符串的后面
[s appendString:@"字符串"];
(3),删除NSRange范围内的字符
NSRange range = [s rangeOfString:@"is"]
[s rangeOfSring:range];
[s deleteCharactersInRange:NSMakeRange(4,2)];
4,NSString和NSMutableString追加方法比较
// 返回一个新的字符串NSString
NSString *newstring = [s stringByAppendString:@"11 12"];
// 没有返回值,已经在s后面附加
[s appendString:@"字符串"];
3,NSArray
原理:以面向对象思想操纵数组,OC数组NSArray只能存放OC对象,不能存放非OC对象类型,不能存放nil值
1,类方法创建
NSArray *a =[NSArray arrayWithObject:(id)];
// 后面的nil是数组元素结束的标记
NSArray *a =[NSArray arrayWithObject:(id),...,nil];
// 编译器特性 ,快速创建一个NSArray对象
NSArray *a = @[id,...];
2,NSArray常用方法举例
(1),求元素个数
[a count];// get方法
(2),访问数组元素方法有两种
[a objectAtIndex:1];
a[1];// 编译器特性
(3),找到元素在数组中的位置
NSUInteger i =[a indexOfObject:数组元素];
(4),快速遍历
// 普通方法
for (int i = 0,i<a.count;i++){代码段}
// id obj代表着数组中的每一个元素,缺点不知道第几次
for (id obj in a)
{
NSLog(@"%@",obj)
}
// 利用block,每遍历到一个元素,就会调用一次block,并且当前元素和索引文职当作参数传给block
// BOOL *stop 用来停止遍历
[a enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop){代码段}]
3,NSMutableArray
(1),创建
@[] 只创建不可变数组NSArray;
(2),方法
// 添加元素
[array addObject:id];
// 删除元素
[array removeAllObjects];
// 删除指定的元素
[array removeObjects:id];
[array removeObjectAtIndex:0];
4,NSSet
原理,存放的元素是没有顺序的
1,类的创建
NSSet *s = [NSSet setWithObject:(id),...,nil]
2,方法
(1),随机选取元素
[s anyObject];
(2),添加元素
[s addObject:(id)];
(3),删除元素
[s removeObject:(id)];
5,NSDictionary
原理,里面存放的东西都是键值对,key -->value,索引-->文字内容
1,创建
(1) 创建key和value后
NSArray *keys = @[(id),...];
NSArray *objects = @[(id),...];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
(2) key和value放一起
NSDictionary *dict =[NSDictionary dictionaryWithObjectsAndKeys:
(id),(id),
(id),(id),
(id),(id),nil];
(3) 编译器特性
NSDictionary *dict = @{(keyid) : (valueid),(keyid) : (valueid),...};
2,方法
(1),拿出键对应的值
id obj =[dict objectForKEY:@"name"];
// 编译器特性
id obj = dict [(keyid)];
(2),键值对的个数
dict.count;
3,NSMutableDictionary
(1),添加键值对
[dict setObject:id forKey:id];// 多次添加键值对,最后的会覆盖前面的
(2),移除键值对
removeObjectForKey:id
4,遍历
(1),先拿出keys存放在数组中
NSArray *keys = [dict allkeys];
for (int i=0; i<dict.count;i++)
{
NSString *key = keys[i];
NSString *object = dict[key];
NSLlog*(@"");
}
(2),利用block
[dict enumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop){
NSLog(@"%@ - %@",key,obj);
}];