Foundation框架中包含了很多开发中常用的数据类型,比如,结构体,字符串,集合类等,是其他iOS框架的基础。如果想要使用Foundation框架的数据类型,那么只要包含它的
头文件就可以了,即#import<Foundation/Foundation.h>
Foundation中常用的结构体:
在foundation框架中,常用的结构体有四种:
NSRange
NSPoint\CGpoint
NSSize\CGSize
NSRect\CGRect
NSRange: 表示范围(location length)
NSRange的定义:位置和长度
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
NSRange的基本使用:
// @"i love oc" //love的范围
NSRange r1 = {2,4}; //可读性比较差,开发中一般不用
NSRange r2 = {.location = 2, .length = 4}; //不用
//实际开发中最常用的是使用Foundation自带的函数,如下:
NSRange r3 = NSMakeRange(2, 4); //要求掌握
//字符串创建最快的方式
NSString *str = @"i love oc";
//rangeOfString查找某个字符串的范围,查找love的范围
//如果找不到,length= 0,location = NSNotFound == -1
NSRange range = [str rangeOfString:@"love"];
//打印出来
NSLog(@"loc = %ld,length = %ld",range.location,range.length);
NSPoint\CGPoint:(表示坐标)
NSPoint和CGPoint是一样的,开发中经常用CGPoint
typedef CGPoint NSPoint;
struct CGPoint {
CGFloat x;
CGFloat y; //CGFloat类型,实际就是double
};
typedef struct CGPoint CGPoint;
NSPoint\CGPoint的使用:
//开发中CGPoint经常使用,因为他是跨平台的
//创建结构体变量
NSPoint p1 = CGPointMake(10, 10); //最常用
CGPoint p2 = NSMakePoint(10, 10);
NSSize\CGSize:(表示UI元素的尺寸,宽度和高度)
用法基本和NSPoint一样
typedef CGSize NSSize;
struct CGSize {
CGFloat width;
CGFloat height;
};
typedef struct CGSize CGSize;
NSSize\CGSize的基本使用:
//创建结构体变量
NSSize s1 = CGSizeMake(100, 50);
NSSize s2 = NSMakeSize(100, 50);
CGSize s3 = NSMakeSize(200, 100);
NSRect\CGRect:(表示一个UI元素的位置和尺寸 CGPoint CGSize)
typedef CGRect NSRect;
struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
基本使用:
//创建结构体变量
//方式一
CGRect r1 = CGRectMake(0, 0, 50, 100);
//方式二
CGRect r2 = {{0,0},{50,100}};
//方式三
CGRect r3 = {p1 ,s2};
CGRect r4 = {CGPointZero,CGSizeMake(50, 100)};
//表示原点,开发中经常用
//CGPointZero ==CGPointMake(0, 0);
// //常规的使用方式:
// CGRect myRect(CGFloat x,CGFloat y,CGFloat width,CGFloat height)
// {
// CGRect rect;
// rect.origin.x = x;
// rect.origin.y = y;
// rect.size.width = width;
// rect.size.height = height;
//
// return rect;
// }
//开发中经常是先把结构体转成字符串,然后再打印
//结构体转换为字符串的方式,要求掌握
//NSString *str = NSStringFromPoint(p1); //把坐标转换成字符串
//NSString *str = NSStringFromSize(s3); //吧尺寸转换成字符串
NSString *str = NSStringFromRect(r1); //把位置和尺寸转换成字符串的形式打印
NSLog(@"%@",str);
//尝试打印,此方式比较麻烦,开发中不使用
// NSLog(@"x = %f,y = %f ,width = %f,height = %f ",r1.origin.x,r1.origin.y,r1.size.width,r1.size.height);
Foundation 框架中一些经常用到的结构体函数:
使用这些函数的前提是添加CoreGraphics框架
//比较两个点的位置是否相同 (x 、y)
BOOL b = <span style="color:#ff0000;"> CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));
//比较两块区域是否相同]
CGRectEqualToRect(<#CGRect rect1#>, <#CGRect rect2#>)
//比较两个尺寸是否相同
CGSizeEqualToSize(<#CGSize size1#>, <#CGSize size2#>)
//判断这个点是否在区域范围内
// x(50,100) y(40,90)
BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 1010, 50), CGPointMake(60, 40));
NSLog(@"%d",b2);
NSString:
NSString :不可变字符串
NSMutableString :可变字符串
字符串的创建方式:
//字符串的创建
NSString *s1 = @"jack";
NSString *s2 = [[NSString alloc]initWithString:@"jack"]; //几乎没人用
NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d",10];
//C字符串 --> OC字符串
NSString *s4 = [[NSString alloc]initWithUTF8String:"jack"];
// OC字符串 --> C字符串
const char *cs = [s4 UTF8String];
// NSUTF8StringEncoding 用到中文就可以用这种编码
// 读取文件内容的方法
NSString *s5 = [[NSString alloc]initWithContentsOfFile:@"/Users/mymac/Desktop/test/内存管理/总结.m" encoding:NSUTF8StringEncoding error:nil];
NSLog(@"\n%@",s5);
//URL :资源路径
//协议头://路径
//(本地文件)file://
// ftp://
//http://weibo.com/a.png
//NSURL *url = [[NSURL alloc]initWithString:@"file:///Users/mymac/Desktop/test/内存管理/总结.m"];
NSURL *url = [NSURL fileURLWithPath:@"//Users/mymac/Desktop/test/内存管理/总结.m"];
NSString *s6 = [[NSString alloc]initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"s6 = \n%@", s6);
/*
创建字符串的时候通常也有一些类方法
一般都会有一个类方法跟对象方法配对,开发中经常使用类方法,很少使用对象方法,以节省时间
[NSURL URLWithString:(NSString *)];
[NSString stringWithFormat:@""];
[NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>];
*/
字符串写到文件中的方式:
//字符串写到文件中的方法
[@"jack\njack" writeToFile:@"/Users/mymac/Desktop/test/内存管理/总结.m "atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSString *str = @"rweudjkqsdjiw";
NSURL *url = [NSURL fileURLWithPath:@"/Users/mymac/Desktop/test/内存管理/总结.m"];
[str writeToFile:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
可变字符串的使用:
//可变字符串的创建
NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is 10"];
//拼接内容到S1的后面
[s1 appendFormat:@" 11 12"];
//获取is的范围
NSRange range = [s1 rangeOfString:@"is"];
[s1 deleteCharactersInRange:range]; //删除
NSString *s2 = [NSString stringWithFormat:@"age is 10"];
NSLog(@"s1 = %@,s2 = %@",s1,s2);