3、Foundation

常用的结构体:
NSRange:
NSPoint:–(x,y)
NSString
创建字符串方法:
从文件读字符串
字符串写文件
其它方法(略,待补充)
NSMutableString
NSArray
给数组里的元素都发送相同消息:
数组的遍历
数组的排序:
派生出新的数组
其它
NSMutableArray
NSDictonary
遍历
NSMutableDictionary
NSSet
NSMutableSet
NSNumber
NSValue
系统自带结构体
自定义结构体
NSNull
NSDate

常用的结构体:


NSRange:

  1. void range(){
  2. //方法1
  3. NSRange r1;
  4. r1.location=9;
  5. r1.length=3;
  6. NSString *str1 = NSStringFromRange(r1);
  7. NSLog(@"r1 is %@",str1);
  8. //方法2
  9. NSRange r2=NSMakeRange(9, 3);
  10. NSString *str2 = NSStringFromRange(r2);
  11. NSLog(@"r2 is %@",str2);
  12. }

NSPoint:–(x,y)

  1. void point(){
  2. //方法1
  3. NSPoint p1;
  4. p1.x=8;
  5. p1.y=9;
  6. NSString *str1=NSStringFromPoint(p1);
  7. NSLog(@"p1 is %@",str1);
  8. //方法2
  9. NSPoint p2 = NSMakePoint(8, 9);
  10. NSString *str2=NSStringFromPoint(p2);
  11. NSLog(@"p2 is %@",str2);
  12. //方法3
  13. NSPoint p3=CGPointMake(8, 9);
  14. NSString *str3 = NSStringFromPoint(p3);
  15. NSLog(@"p3 is %@",str3);
  16. }

NSSize::(width , height);

NSRect:包括NSPoint 和NSSize;

NSString

不可变字符串

创建字符串方法:

  1. void stringCreate(){
  2. //动态方法创建
  3. //1
  4. NSString *str1 = @"A string";
  5. //2
  6. NSString *str2 = [[NSString alloc] init];
  7. str2 [email protected]"A string";
  8. //3
  9. NSString *str3 =[[NSString alloc] initWithUTF8String:"A string"];
  10. //4
  11. NSString *str4 =[[NSString alloc] initWithFormat:@"my age is %i",19];
  12. //静态方法创建
  13. //5
  14. NSString *str5 =[NSString stringWithUTF8String:"A string"];
  15. //6
  16. NSString *str6 =[NSString stringWithFormat:@"my age is %i",19];
  17. }

从文件读字符串

  1. void stringCreate2(){
  2. NSString *path[email protected]"/Users/llw/tmp/test.txt";
  3. //CFStringConvertNSStringEncodingToEncoding(kCFStringEncodingGB_18030_2000);
  4. NSError *error;
  5. NSString *str1=[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
  6. if(error){
  7. NSLog(@"读取文件失败,%@",error);
  8. }else{
  9. NSLog(@"读取文件成功,content is %@",str1);
  10. }
  11. }

字符串写文件

  1. void stringExport(){
  2. NSString *str[email protected]"123456";
  3. //如果文件不存在,则创建;
  4. //如果文件夹不存在,则报错
  5. NSString *path = @"/Users/llw/tmp/test.txt";
  6. NSError *error;
  7. //YES 代表要进行原子操作,也就是会先创建一个临时文件
  8. [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
  9. if(error){
  10. NSLog(@"写入文件失败,%@",[error localizedDescription]);
  11. }else{
  12. NSLog(@"写入文件成功,");
  13. }
  14. }

其它方法(略,待补充)

NSMutableString

可变字符串,是NSString的子类。类似于java中的stringBuffer

  1. void operate(){
  2. //初始化时分配10个字数的存储空间。
  3. NSMutableString *str1 = [[NSMutableString alloc] initWithCapacity:10];
  4. [str1 setString:@"1234"];//设置字符串内容
  5. NSLog(@"str1 is %@",str1);
  6. //拼接一个字符串
  7. [str1 appendString:@"567"];
  8. NSLog(@"str1 is %@",str1);
  9. //拼接一个字符串
  10. [str1 appendFormat:@"age is %i ",27];
  11. //替换字符串 age-> no
  12. NSRange range =[str1 rangeOfString:@"age"];
  13. [str1 replaceCharactersInRange:;range withString:@"no"];
  14. //插入字符串
  15. [str1 insertString:@"abc" atIndex:2];
  16. //删除字符串
  17. range =[str1 rangeOfString:@"age"];
  18. [str1 deleteCharactersInRange:range];
  19. }

NSArray

列表,是不可变的。类似于java中的ArrayList

  1. void arrayCreate(){
  2. //1 创建一个空的数组
  3. NSArray *array1 = [NSArray array];
  4. //2 创建1个元素的数组
  5. NSArray *array2 =[NSArray arrayWithObject:@"123"];
  6. //3 创建有3个元素的数组,nil表示数组的结束
  7. NSArray *array3 = [NSArray arrayWithObjects:@"a",@"b",@"c", nil];
  8. unsigned long count=[array3 count];//等价于 array3.count
  9. }
  10. void arrayUse(){
  11. NSArray *array = [NSArray arrayWithObjects:@"a",@"b",@"c", nil];
  12. if([array containsObject:@"a"]){
  13. NSLog(@"contains a");
  14. }
  15. NSString *last =[array lastObject];
  16. NSString *str1 = [array objectAtIndex:1];
  17. int index = [array indexOfObject:@"c"];
  18. }

给数组里的元素都发送相同消息:

  1. void arrySetMessage(){
  2. Student *stu1 = [[Student alloc]init];
  3. Student *stu2 = [[Student alloc]init];
  4. Student *stu3 = [[Student alloc]init];
  5. NSArray *array =[[NSArray alloc] initWithObjects:stu1,stu2,stu3, nil];
  6. //让数组中的所有对象都调用test方法,并传入参赛@“123”
  7. //Student 类里面有test方法,可以传入一个参数
  8. [array makeObjectsPerformSelector:@selector(test:) withObject:@"123"]
  9. ;
  10. }

数组的遍历

  1. void arrayFor(){
  2. Student *stu1 = [[Student alloc]init];
  3. NSArray *array = [NSArray arrayWithObjects:@"a",@"b",@"c",stu1, nil];
  4. //1
  5. int count=array.count;
  6. for (int i=0; i<count; i++) {
  7. id obj = [array objectAtIndex:i];
  8. NSLog(@"%i is %@",i,obj);
  9. }
  10. //2 快速遍历
  11. for(id obj in array){
  12. NSLog(@"%@",obj);
  13. }
  14. //3 利用block遍历,stop用于终止循环(break)
  15. [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
  16. NSLog(@"%zi is %@",idx,obj);
  17. //如果索引为1时停止遍历
  18. if(idx ==1){
  19. *stop =YES;
  20. }
  21. }];
  22. //4利用迭代器遍历
  23. //获取迭代器
  24. NSEnumerator *enumerator = [array objectEnumerator];
  25. //获取反序迭代器
  26. //[array reverseObjectEnumerator];
  27. id obj =nil;
  28. while (obj =[enumerator nextObject]) {
  29. NSLog(@"%@",obj);
  30. };
  31. NSArray *array1 = [enumerator allObjects];//返回迭代器中的所有没被遍历过的元素。
  32. }

数组的排序:

  1. void arraySort(){
  2. NSArray *array = [NSArray arrayWithObjects:@"2",@"3",@"1",@"4", nil];
  3. //1
  4. //返回一个排好序的数组,原数组不变
  5. //指定元素的比较方法compare:
  6. NSArray *array2 = [array sortedArrayUsingSelector:@selector(compare:)];
  7. //2 Student里定义排序方法
  8. Student *stu1 =[Student studentWithFirstname:@"张" andLastname:@"三"] ;
  9. Student *stu2 =[Student studentWithFirstname:@"李" andLastname:@"四"] ;
  10. Student *stu3 =[Student studentWithFirstname:@"王" andLastname:@"五"] ;
  11. Student *stu4 =[Student studentWithFirstname:@"赵" andLastname:@"六"] ;
  12. NSArray *array3 = [NSArray arrayWithObjects:stu1,stu2,stu3,stu4, nil];
  13. NSArray *array4 = [array3 sortedArrayUsingSelector:@selector(compareStudent:)];
  14. //3 利用block排序
  15. [array3 sortedArrayUsingComparator:^NSComparisonResult(Student *obj1, Student *obj2) {
  16. NSComparisonResult result=[obj1.firstname compare:obj1.firstname];
  17. if(result == NSOrderedSame){
  18. result = [obj1.lastname compare:obj1.lastname];
  19. }
  20. return result;
  21. }];
  22. //4
  23. NSSortDescriptor *fristnameAsc =[NSSortDescriptor sortDescriptorWithKey:@"firstname" ascending:YES];
  24. NSSortDescriptor *lastnameDesc =[NSSortDescriptor sortDescriptorWithKey:@"lastname" ascending:NO];
  25. NSArray *sort =[NSArray arrayWithObjects:fristnameAsc,lastnameDesc, nil];
  26. NSArray *array5= [array3 sortedArrayUsingDescriptors:sort];
  27. }

派生出新的数组

  1. void arrayNew(){
  2. NSArray *array = [NSArray arrayWithObjects:@"a",@"b",@"c", nil];
  3. NSArray *array2=[array arrayByAddingObject:@"d"];
  4. NSArray *array3=[array arrayByAddingObjectsFromArray:[array arrayByAddingObject:@"d"]];
  5. NSRange range =NSMakeRange(1, 2);
  6. NSArray *array4=[array subarrayWithRange:range];
  7. }

其它

  1. void arrayOther(){
  2. NSArray *array = [NSArray arrayWithObjects:@"a",@"b",@"c", nil];
  3. //用","连接数组中所有对象
  4. NSString *str =[array componentsJoinedByString:@","];
  5. //将一个数组持久化到文件中,文件内容是xml格式
  6. NSString *path[email protected]"/Users/llw/tmp/test.xml";
  7. [array writeToFile:path atomically:YES];
  8. //从文件中读取。(文件内容有严格的格式要求)
  9. NSArray *array2 = [NSArray arrayWithContentsOfFile:path];
  10. }

NSMutableArray

可变数组。

NSDictonary

字典,不可变的。

  1. void dictCreate(){
  2. NSDictionary *dict = [NSDictionary dictionaryWithObject:@"v" forKey:@"k"];
  3. //最常用方法
  4. dict=[NSDictionary dictionaryWithObjectsAndKeys:
  5. @"v1",@"k1",
  6. @"v2",@"k2", nil];
  7. NSArray *objects =[NSArray arrayWithObjects:@"v1",@"v2",@"v3", nil];
  8. NSArray *keys =[NSArray arrayWithObjects:@"k1",@"k2",@"k3", nil];
  9. dict =[NSDictionary dictionaryWithObjects:objects forKeys:keys];
  10. }
  1. void dictUse(){
  2. NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys:
  3. @"v1",@"k1",
  4. @"v2",@"k2", nil];
  5. unsigned long count = dict.count;
  6. //是不可变的,只能取值,不能修改值
  7. id obj = [dict objectForKey:@"k2"];
  8. //write to file
  9. NSString *path[email protected]"/Users/llw/tmp/test.txt";
  10. [dict writeToFile:path atomically:YES];
  11. NSArray *keys = [dict allKeys];
  12. NSArray *objects =[dict allValues];
  13. //notFoundMarker 表示 根据key找不到值时用notFoundMarker代替
  14. NSArray *objects2 = [dict objectsForKeys:[NSArray arrayWithObjects:@"k1",@"k2", nil] notFoundMarker:@"no found"];
  15. }

遍历

  1. void dictFor(){
  2. NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys:
  3. @"v1",@"k1",
  4. @"v2",@"k2", nil];
  5. //1
  6. for (id key in dict) {
  7. id value = [dict objectForKey:key];
  8. }
  9. //2 使用迭代器
  10. //分key迭代器 ,value迭代器
  11. NSEnumerator *enumer =[dict keyEnumerator];
  12. id key =nil;
  13. while (key = [enumer nextObject]) {
  14. id value = [dict objectForKey:key];
  15. }
  16. NSEnumerator *enumer1 =[dict objectEnumerator];
  17. //3 block,stop用于终止循环(break)
  18. [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
  19. NSLog(@"[%@ %@]",key,obj);
  20. }];
  21. }

NSMutableDictionary

可变字典

NSSet

NSMutableSet

NSNumber

可以将基本数据类型包装成对象,这样就可以间接将基本数据类型存进NSArray,NSDictionary等集合中。

  1. void number(){
  2. NSNumber *number = [NSNumber numberWithInt:10];
  3. NSMutableArray *array =[NSMutableArray array];
  4. [array addObject:number];
  5. //取出来还是number,不会自动解包
  6. NSNumber *number1 =[array lastObject];
  7. int num= [number1 intValue];
  8. }

NSValue

NSNumber是NSValue的子类,但NSNumber只能包装基本数据类型,NSValue可以包装任意值,也就可以用NSValue包装结构体后加入NSArray,等集合中。

系统自带结构体

  1. void value(){
  2. CGPoint point =CGPointMake(10, 10);
  3. //将结构体包装成一个对象
  4. NSValue *value = [NSValue valueWithPoint:point];
  5. NSMutableArray *array =[NSMutableArray array];
  6. [array addObject:value];
  7. NSValue *value1 =[array lastObject];
  8. CGPoint point1 =[value1 pointValue];
  9. BOOL result = CGPointEqualToPoint(point,point1);
  10. }

自定义结构体

  1. typedef struct{
  2. int year;
  3. int month;
  4. int day;
  5. } Date;
  6. void value2(){
  7. Date date= {2013,4,7};
  8. //void * 代表任何指针
  9. //这里要传结构体的地址
  10. //根据结构体类型生成 对应的 类型描述字符串
  11. char *type =@encode(Date);
  12. NSValue * value = [NSValue value:&date withObjCType:type];
  13. //定义一个结构体变量
  14. Date date1;
  15. //取出包装好的结构体
  16. [value getValue:&date1 ];
  17. }

NSNull

集合中不能存放nil值,因为nil在集合中有特殊含义,但有时确实需要存储一个表示“什么都没有”的值,那么久可以使用NSNull,它也是NSObject的一个子类。

  1. //[NSNull null]返回的是同一个单例对象,所以n = n1
  2. NSNull *n =[NsNull null];
  3. NSNull *n1 =[NSNull null];

NSDate

来自为知笔记(Wiz)

时间: 2024-10-22 04:24:45

3、Foundation的相关文章

CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(1)设定背景图

技术的新发展,除计算机可以接入互联网之外,平板电脑.智能手机.智能电视等其他设备均可访问互联网.在多设备时代,构建多屏体验也不是听说的那么难. 但是这也增加了学习CSS的难度?不知道如何上手,只懂一点基础的CSS语法,在移动互联时代,难道我们就这样落伍了??好好学习吧,看完<CSS高效开发实战:CSS 3.LESS.SASS.Bootstrap.Foundation>,给自己的未来打气! 5.1  设定背景图的大小 在CSS 3出现之前,背景图片的尺寸是由图片的实际尺寸决定的.如果同样的图片要

只会CSS还不够,LESS、SASS、BootStrap、Foundation一网打尽!

有些人想学CSS,不知如何下手:有些人已经学会CSS的各种属性,却不知如何运用:有些人会平面设计,不知道如何与网页设计结合:有些人会HTML,就是学不会CSS.试问自己,图中的技术你都会了吗? 别总是怨天尤人了,<CSS高效开发实战-CSS 3.LESS.SASS.Bootstrap.Foundation>书写作的目的是要确保CSS不会成为开发过程或网站性能的瓶颈,确保读者可以运用一些工具.框架.预处理来提升开发效率和节约人力成本,确保所讲解的内容读者都能活学活用. 曾就职于CSDN和淘宝的一

Cocoa、Foundation、UIKit、Objective-c、XCode、Interface Builder的概念

Cocoa 是在Mac OS X系统上原生的一个编译环境.他包含两个框架,其实就是一系列的类库,Foundation和AppKit. 在你的iPhone等掌上设备上,使用的则是他的一个子类 - Cocoa Touch.他所支持的Foundation框架与Cocoa相同,但他的用户图形类库为UIKit,它是为掌上设备特殊设计,提供了你设备上的界面. Cocoa Touch与Cocoa一个比较鲜明的区别就是Cocoa Touch并不支持垃圾回收机制,这就意味着你必须在你的代码里管理好你的内存. Fo

转:Cocoa、Foundation、UIKit、Objective-c、XCode、Interface Builder的概念

Cocoa 是在Mac OS X系统上原生的一个编译环境.他包含两个框架,其实就是一系列的类库,Foundation和AppKit. 在你的iPhone等掌上设备上,使用的则是他的一个子类 - Cocoa Touch.他所支持的Foundation框架与Cocoa相同,但他的用户图形类库为UIKit,它是为掌上设备特殊设计,提供了你设备上的界面. Cocoa Touch与Cocoa一个比较鲜明的区别就是Cocoa Touch并不支持垃圾回收机制,这就意味着你必须在你的代码里管理好你的内存. Fo

目前几款基于html5的前端框架:如Bootstrap、Foundation、Semantic UI 、Amaze UI

Bootstrap是由Twitter在2011年8月推出的开源WEB前端框架,集合CSS 和HTML,使用了最新的浏览器技术,为快速WEB开发提供了一套前端工具包,包括布局.网格.表格.按钮.表单.导航.提示,其核心就是基于Less框 架构建的CSS.Bootstrap框架拥有美观的样式和封装完善的JQ插件,使用方便,基于Bootstrap的扩展也很多,这是其他框架所无法比拟 的,也是其最受欢迎的条件之一. Foundation宣称是世界最好的响应式前端框架,默认支持5种网格布局,是三款框架中最

CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(2)CSS3利用图层叠加实现多背景

CSS 3允许设置多个背景图片,每个背景图片占一层,层的上下按照在CSS中书写的顺序来定,最先写的背景在最上层,每层图片定义使用英文逗号隔开. 例如下面的代码: background:url(http://dotnet.aspx.cc/Book/Images/CSS1_s.jpg) 0 0 no-repeat, url(http://dotnet.aspx.cc/Book/Images/CSS2_s.jpg) 200px 0 no-repeat, url("http://dotnet.aspx.

CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(3)线性渐变

线性渐变可以设置3个参数值:方向.起始颜色.结束颜色.最简单的模式只需要定义起始颜色和结束颜色,起点.终点和方向默认自元素的顶部到底部.下面举例说明: .test{ background:linear-gradient(red, blue); } 上述代码的效果如图5.9所示. 图5.9  最简单的线性渐变效果 如果要在一些旧版本的浏览器(除IE)下可以正常显示如图5.9的效果,则需要添加兼容代码: .test { background:-webkit-linear-gradient(red,

CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(5)使用放射渐变制作光影效果

阴影效果通常用来表现光线投射在物体上的感觉,如果想制作一个如图5.19所示的文字光影效果,就可以使用背景的线性渐变进行构建. 图5.19可以看到有类似光束照射文字的效果,很好地突出了文字.这实现起来很简单,只需要对文字居中,对背景元素设置从中心发散的放射渐变即可,代码如下: // HTML代码 <div class="box">赞</div> // CSS代码: .box{ width: 200px; height: 200px; font-size: 80px

CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(4)构造尺寸更灵活的背景

相比传统的图片背景来说,使用CSS构造背景色不仅可以降低网络传输的开销,更由于其尺寸的可控性受到开发者的青睐. 如设计师设计了一张背景图片作为标题背景,如图5.18所示.对于用电脑浏览网页的用户来说,标题基本不存在折行现象,布局也基本是固定宽度的,因此直接使用设计师给出的背景图即可.但是这个页面主要是在手机上显示,标题根据长度不同可能占1行,也可能占3行,如果采用图片就必须根据不同的情况放不同的背景图,实现起来很复杂. 图5.18  设计师给出的背景 好在这张背景图实际是从左到右由深紫蓝色渐变至