A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丶有果灬 中级黑马   /  2015-4-29 16:09  /  1800 人查看  /  18 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

Foundation框架

(1)结构体
Foundation基础框架是其他所有的ios框架的基础
Foundation框架包含了很多开发中常用的数据类型
struct Date{
int year;
int month;
int day;
};
struct Date d = {2011,9,1};
struct Date d2 = {.month = 10;.yeah = 2019,.day = 20};
例子:找一个字符串里面的某个单词或者字符在字符串里面的位置
@"i love oc";//love的范围
NSRange r1 = {2,4};//不用,不是太明确
NSRange r2 = {.loction = 2,.length = 4};//稍麻烦,也不用
NSRange r3 = NSMakeRange(2,4); //掌握
NSString *str = @"i love oc";
NSRange range = [str rangeofString:@"love"];
NSLog(@"loc = %ld,leng = %ld",rang.location,range.length);
//如果找不到的话,length = 0,location = NSNotFound = -1;
NSNotFound 以整数形式打印出来是-1,以ld打印出来是9223372036854775807.

CGPoint p1 = NSMakePoint(10,10);
NSPoint p2 = CGPointMake(20,20);
NSSize s1 = CGSizeMake(100,50);
NSSize s2 = NSMakeSize(100,50);
CGSize s3 = NSMakeSIze(200,60);
CGRect r1 = CGRectMake(0,0,100,50);

//将结构体转为字符串
NSString *str = NSStringFromPoint(p1);
NSLog(@"%@",str);  //其他几个类似差不多
//比较两个点是否相同(x,y)
BOOl b = CGPointEqualToPoint(CGPointMake(10,10),CGPointMake(10,10));
//CGSizeEqualToRect(CGRect,rect1,CGRect rect2);
//CGSizeEqualToSize(CGSize size,CGSize size2);
BOOL b2 = CGRectContainsPoint(CGRectMake(50,40,100,50),CGPointMake(130,70));
NSLog(@"%d",b2);
这里CG开头的引用了另外一个框架   CoreGraphics框架
所以使用这些函数的前提是添加CoreGraphics框架.

(2)//字符串
NSString:不可变的字符串
NSMatableString:可变的字符串
1.字符串的创建
NSString *s1 = @"jack";
//NSString *s2 = [[NSString alloc]initWithString:@"jack"];
NSString s3 = [[NSString alloc]initWithFormat:@"age is %d",10];
//字符串-->oc字符串
NSString *s4 = [[NSString alloc]initWithUTF8String:"jack"];
//oc字符串-->c字符串
const char *cs = [s4 UTF8String];
NSString *s5 = [NSString alloc]initWithContentsofFile:@"绝对路径"encoding:NSUTF8StringEncoding error:
(NSError *_autoreleaseing *);
//NSUTF8StringEncoding 用到中文就可以用这种编码
//URL:资源路径
//http://weibo.com/a.png
协议头://路径
int main(){
NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is 10"];
//拼接内容到s1的后面
[s1 appendString:@"11 12"];
NSString *s2 = [NSString stringWithFormat:@"age is 10"];
NSLog(@"s1 = %@,s2 = %@",s1,s2);//不可拼接
return 0;
}


(3)NSArray的引入:

//获取is的范围
NSRange range = [s1,rangeofstring:@"is"];
//单用的时候[s1 deletecharactersInRang = NSMakeRange(4,2)];
[s1 deletecharactersInRang = range];
//不可变的是在内存中重新复制一份给新的变量,再进行拼接,赋给新的那个变量。

NSArray:不可变的数组
NSMutableArray:可变数组
//oc数组只能存放oc对象,不能存放非oc对象类型,比如int、struct、enum等
//这个array永远是空数组
//NSArray *array = [NSArray array];
//oc数组不能存放nil值
NSArray *array2 = [NSArray arrayWithObject:@"jack"];
//nil是数组元素结束的标记
NSArray *array3 = [NSArray arrayWithObjects:@"jact",@"rose",nil];
//[array2 Count];
NSLog(@"%ld",array3.Count);
return 0;
//怎样去访问数组里面的元素
//NSArray *array4 = [NSArray arrayWithObjects:@"jack",@"rose",@"4324324",nil];
//快速创建一个NSArray对象
NSArray *array4 = @[@"jack",@"rose",@"4324324"];

NSArray的元素个数
NSLog(@"%ld",array3.Count);
NSLog(@"%@",[array3objectAtIndex:1]);
//array3[1];
NSLog(@"%@",array3[0]);
//遍历
int main(){
Person *p = [[Person alloc]init];
NSArray *array = @[p,@"rose",@"jack"];
for(int i = 0;i
NSLog(@"%@",array[i]);}
//id obj代表着数组中的每一个元素
//int i = 0;
for(id obj in array)
{//找出obj元素在数组中的位置
int i =[array indexOfObject:obj];
NSLog(@"%ld - %@",i,obj);
//i++
}
[array enumerateObjectsUsingBlock:
//每遍历到一个元素,就会调用一次block
//并且当前元素位置当做参数传给block
^(id obj,NSUInteger idx,BOOL *stop){
NSLog(@"--------------------");
NSLog(@"%ld - %@",idx,obj);
//调用block
sumBlock(10,11);
];
//if(idx==0)
{//停止遍历
*stop = YES;
}
//外循环for语句
for(int i = 0;i
//用来标记是否需要停止遍历
BOOL isStop = NO;
//取出元素
id obj = array;
Myblock(obj,i,&isStop);
if(isStop)
{break;}


(4)综合练习:
//计算单个文件的代码行数
考察NSString和NSArray的使用
//计算单个文件的代码行数
path:文件路径   返回值:int 代码行数
int main(){
int count = codeLineCount(@"全部路径");  //在这里可以存入单个文件或者文件夹的路径
NSLog(@"count = %d",count);
return 0;
}
NSUInteger codeLineCount(NSString *path)
{ //1.加载文件内容
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",count);
        //2.将文件内容切割为每一行
NSArray *array = [content componentsSeparatedByString:@"\n"];
return array.count;
}
int i=0;
for(NSString *line in array){
NSLog(@"%d-%@",i,line);
i++
}

//计算整个文件夹的代码行数
NSFileManager   文件管理者
//获得文件管理者
NSFileManager *mgr = [NSFileManager defaultManager];
//2.获取判断path是文件夹还是文件路径
BOOL exist = [mgr fileExistsAtPath:path isDirctionary:&dir];
//判断此路径是否存在
if(!exist) //如果不存在,直接返回0
return 0;
BOOL dir = NO;  //判断标记是否是文件夹
if(dir)
{
NSLog(@"是个文件夹");
}else{
NSLog(@"是个文件");
}
int count = 0;
在上述判断是文件夹的时候则可以进行下一步的抉择
//装着当前文件夹下面的所有内容(文件夹、文件)
NSArray *array = [mgr contentsOfDirectionAtPath:path error:nil];
//遍历数组中的所有文件夹名
for(NSString *filename in array){
NSString *fullPath = [NSString stringWithFormat:@"[url=]%@/%@",path,filename[/url]];
count += codeLineCount(fullpath);
}
return count;
//判断文件中的扩展名
NSString *extension = [[path pathExtension lowercaseString];//转小写
NSLog(@"%@",extension);
//做判断
if(![Extension isEqualTostring:@"h"]&&![Extension isEqualTostring:@"m"]&&![Extension isEqualTostring:@"c"])
{
//文件扩展名不是.m\.h\.c
return 0 ;
}

NSArray 存有序的数组、不可变的
NSMutableArray 可变数组
int main(){
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose",@"jim",nil];
//添加对象,创建一个Person对象存入
[array addObject:[[Person alloc]init]];
[array addObject:@"jack"];
[array addObject:10];   //错误写法、在oc当中存基本数据类型不可以
//删除元素
[array removeAllObjects];
//删除指定元素
[array removeObject:@"jack"];
//错误写法
[array addObject:nil];
[array removeObjectAtIndex:2];   //删除了第3个下标对应的数字
NSLog(@"array",array);
//快速生成数组
//下面二行是不可行的存的是不可变数组、却用到了可变数组的方法
NSArray *array = @[@"jack",@"rose"];
[array addObject:@"jim"];
//@[]只创建不可变数组的NSArray
//在这里其他的还有很多,看PPT就可以,可以练习、去实现一下、都差不多。


(5)NSSet
int main(){
NSSet *s = [NSSet set];   //空放了一个数组
NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose",nil];
//NSLog(@"%ld",s2.count);
NSString *str = [s2 anyObject];
//随机拿出一个元素
NSLog(@"%@",str);

NSMutableSet *s = [NSMutableSet set];
//添加元素
[s addObject:@"hack"];
//删除元素
[s removeObject:(id)];
return 0;
}
NSSet和NSArray的对比
1.共同点
都是集合、都能存放多个oc对象
只能存放多个oc对象,不能存放非oc对象类型(基本数据类型:int\char\float等、结构体、枚举等)
本身的都不可以变、都有一个可变的子类
2.不同点
NSArray有顺序、NSSet没有顺序

NSDictionary——字典(类似于java中的Map集合)

NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack"forkey:"@name"];
NSArray *keys = @[@"name",@"address"];
NSArray *objects = @[@"jack",@"北京"];

NSDictionary *dict = @{@"name":@"jack",@"address":@"北京"};
//id obj = [dict objectForkey:@"name"];
id obj = dict[@"name"];
NSLog(@"%@",obj);
NSLog(@"ld",dict.count);//返回的是键值对的个数

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
//添加键值对
[dict setObject:@"jack"forkey:@"name"];
[dict setObject:@"北京"forkey:@"adress"];
[dict setObject:@"rose"forkey:@"name"];
NSString *str = dict["name"];
//移除键值对
[dict removeObjectForkey:(id)];

(6)//字典遍历
int main(){
NSDictionary *dict = @{@"name",@"jack",@"qq":@"7657567765"};
/*
NSArray *keys = [dict allkeys];
for(int i = 0;i
NSString *key = keys;
NSString *object = dict[key];
NSLog(@"%@%@"key,object);
}
[dict enumeratekeysAndObjectUsingBlock]:^(id key,id obj,BOOL *stop){
NSLog(@"%@-%@",key,obj);
}];

18 个回复

倒序浏览
不错,敲代码空余,可以经常看看
回复 使用道具 举报
弄得挺好的
回复 使用道具 举报
不错,可以经常看看
回复 使用道具 举报
不错不错,good job!
回复 使用道具 举报
谢谢分享呀!哈哈,好人
回复 使用道具 举报
So然后 2015-4-30 10:32:03
7#
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
谢谢分享!就是字体看的头疼...
回复 使用道具 举报
谢谢分享,
回复 使用道具 举报
我是小菜蛋 来自手机 中级黑马 2015-5-1 13:01:45
10#
谢谢大神分享
回复 使用道具 举报
布局该一下
回复 使用道具 举报
不错 为啥不写博客里面
回复 使用道具 举报
lj61785636 来自手机 中级黑马 2015-5-24 07:50:42
13#
顶一个谢谢楼主
回复 使用道具 举报
感谢分享!!!!
回复 使用道具 举报
好长啊 好长
回复 使用道具 举报
太多了,因该简单明了点。
回复 使用道具 举报
feier 中级黑马 2015-5-25 17:18:53
17#
好东西!!
回复 使用道具 举报
好东西 !!!
回复 使用道具 举报
学习学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马