---------- CornerFly真诚期待与您交流! ----------
一、结构体
Foundation框架中的结构体包括:NSRange NSPoint\CGPoinit NSSize\CGSize NSRect\CGRect
1、NSRange:表示范围
NSRange (location length)
NSString *str = @”I love OC”;
// 表示love的范围
NSRange r1 = {2,4}; // 不用
NSRange r2 =NSMakeRange(2,4);
NSRange range = [str rangOfString:@”love”]; // 查找love这个字符串的范围,返回的是结构体,找不到length为0
2、NSPoint\CGPoint:表示一个点
NSPoint(CGFloat x,CGFloat y) // CGFloat就是double
CGPoint p1 = NSMakePoint(10,10);
NSPoint p2 = CGPointMake(20,20); // 最常用
CGPointZero == CGPointMake(0,0);// 原点
CGPointEqualToPoint(p, p2); //比较两个点是否相同
NSString *str = NSStringFromPoint(p1); // 将结构体p1转为字符串
3、NSSize\CGSize :表示长和宽
NSSize s1 = NSMakeSize(100,50);
CGSize s2 = CGSizeMake(200,100);
4、NSRect\CGRect:表示一个矩形区域
// 创建
NSRect s1 = NSMakeRect(0,0,100,50);
CGRect s2 = CGRectMake(2,2,200,100);
//比较点是否在该区域
CGRectContainsPoint(15, 5);
使用CG开头的要添加CoreGraphics框架
二、NSString
1、NSString和NSMutableString
1>NSString是一个类,表示不可变字符串
2>NSMutableString是NSString的一个子类,表示可变字符串。
2、NSString的操作
// 创建字符串
NSString *s = @"jim";
NSString *s2 = [[NSString alloc] initWithFormat:@"age is %d",10];
//C字符串转OC字符串
NSString *s3=[[NSString alloc] initWithUTF8String:"jack"];
//OC字符串转C字符串
charchar *s4 = [s3 UTF8String];
//NSUTF8StringEncoding 中文格式编码
NSString *s5 = [[NSString alloc]initWithContentsOfFile:@"/Users/tjl/Dektop/1.txt" encoding:NSUTF8StringEncoding error:nil];
//URL:资源路径
协议头:http
//file:本地文件
/ftp:
NSURL *url=[[NSURL alloc] initWithString:@"http:www.baidu.com"];
NSString *s6 = [[NSString alloc]initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",s6);//最常用
//类方法转换
[NSURL URLWithString:s];
[NSString stringWithContentsOfFile:s5 encoding:NSUTF8StringEncoding error:nil];
[NSString stringWithFormat:s];
//文件资源
[NSURL fileURLWithPath:s];
//字符串写入文件
[@"hello world" writeToFile:@"/Users/tjl/Desktop/1.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSString *str = @"hello world";
[str writeToURL:@"http://www.baidu.com" atomically:(YES) encoding:NSUTF8StringEncoding error:nil];
3、NSMutableString的操作
// 创建
NSMutableString *s1 = [NSMutableString stringWithFormat:@” my age is 10”];
// 拼接内容到s1的后面
[s1 appendString:@”11,12”];
//获取is的范围
NSRange range = [s1 rangOfString :@”is”];
// 删除某个字符串
[s1 deleteCharactersInRange:range];
三、集合类
集合类包括NSArray、NSSet、NSDictionary。
1、OC 数组
*OC数组只能存放OC对象,不能存放非OC对象类型。
*OC数组不鞥呢存放nil值
*nil是数组元素结束的标记
2、基本操作
NSArray:OC不可变数组
NSMutableArray:可变数组
// 创建NSArray对象
NSArray *array= [NSArray array];// 这个array永远是空数组
NSArray *arry2 =[ NSArray setWithObject:@”jack”,@”rose”,nil];
NSArray *array1 = @[@”jack”,@”rose”,@”2930231”]; // 快速创建
// 数组元素个数
[array1 count];// 或者array1.count];
3、遍历
第一种:
for(id obj in array1)
{
NSUInteger j = [array1 indexOfObject:obj];// 返回数组的下标
NSLog(@”第%ld个元素是%@”,j.obj);
<a target=_blank href="mailto:%@”,j.obj);}">}
</a>
第二种:通过block遍历
[array enumerateObjectUsingBlock:
// 每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传给block
^(id obj,NSUInteger idx,BOOL *stop)
{
NSLog(@”%ld——%@",idx,obj);
if(idx == 0)
{
// 停止遍历
*stop = YES;
}];
四、练习计算某个文件夹下的代码行数
NSUInteger codeLineCount(NSString *path)
{
//1.获得文件管理者
NSFileManager *mgr = [NSFileManager defaultManager];
//2判断path是文件路径还是文件夹
BOOL dir = NO;//标记是否为文件夹
BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];
//3判断路径是否存在
if(!exist)
{
NSLog(@"文件路径不存在");
return 0;
}
if(dir)//是文件夹
{
NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];
int count=0;
for(NSString *filename in array)
{
NSString *fullpath = [NSString stringWithFormat:@"%@/%@",path,filename];
count += codeLineCount(fullpath);
}
return count;
}
else //是文件
{
//4判断文件拓展名
NSString *extension = [[path pathExtension] lowercaseString ];
if(!([extension isEqualToString:@"m"]||[extension isEqualToString:@"h"]
||[extension isEqualToString:@"c"]))
{
return 0;
}
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
//分局指定内容分割字符串成n块
NSArray *array = [content componentsSeparatedByString:@"\n"];
/*
int i=0;
for(NSString *line in array)
{
NSLog(@"%d-%@",i,line);
i++;
}
*/
NSRange range= [path rangeOfString:@"/Users/tjl/Desktop/2015"];
NSString *newStr = [path stringByReplacingCharactersInRange:range withString:@""];
NSLog(@"%@-%ld",newStr,array.count);
return array.count;
}
}
int main()
{
NSUInteger count=codeLineCount(@"/Users/tjl/Desktop/2015");
NSLog(@"%ld",count);
return 0;
}
五、NSSet
1、
// 创建
NSSet *s = [NSSet set]; // 空的
NSSet *s 2=[ NSSet setWithObject:@”jack”,@”rose”,nil];
// 随机拿出一个元素
NSString *str = [s2 anyObject];
// 删除元素
[s2 removeObject:@”rose”];
2、NSSet和NSArray的对比
*都是集合,都能存放多个OC对象
*只能存放OC对象,不能存放非OC对象类型
*本身都不可变,都有一个可变的子类
*NSArray有顺序,NSSet没有顺序
六、NSDictionary
1、字典不允许有相同的key,但允许有相同的value
2、字典是无序的。
// 创建
NSDictionary *dict = @{@”name”:@”jack”,@”qq”:@”3920495”};
// 遍历
NSArray *keys =[dict allkeys];
for(int j = 0;j<dict.count;j++)
{
NSString *key = keys[i];
NSString *object = dict[key];
NSLog(@”%@ = %@”,key,object);
}