这些东西,等用的时候查资料就行,用的多了,自然就记住了,大概过一下
Foundation 框架
它是IOS应用程序开发的基础,常用的框架有80多个,而 foundation 是他们所有的基础,提供了许多基本的对象类和数据类型,比如数字,字符串,数组,集合,字典,处理日期时间,自动化内存管理,文件,归档,处理几何数据结构等。它为所有应用程序提供基本的数据服务,
Foundation和界面无关,其前缀为NS 。
在Foundation中有些类仅被MAC OS支持而不被IOS支持。
在 mac ox x 中 Cocoa 总的指 Foundation 框架和 application kit 框架,而 cocoa touch 是指 foundation 和 uikit 框架。
Foundation 里常用的结构体:
NSRange(location length)用来表示范围,分多种情况
NSPoint \ CGPoint(开发中常用后者)
NSSize \ CGSize
NSRect \ CGRect (CGPint CGSize)
NSRange原型
typedef struct _NSRange { NSUInteger location; NSUInteger length; } NSRange;
这是 NSRange 结构体的内部结构的形式,两个成员,一个长度,一个位置。不需要再和 c 一样使用 struct 关键字,且成员的数据类型是 NSUInteger
typedef unsigned long NSUInteger;
属于无符号长整型类型的替代写法,就知道它就是一个整型的正数而已。
使用 NSRange 结构体表示范围,比如:
//{1, 2, 3, 4, 5} //表示3,4,5的范围,location=2,length=3
从0开始计数,第2个位置开始,长度为3。
字符串里 love 的范围,从0开始计数第2个位置,长度为4
@"i love oc";
下面这两种写法不推荐(前者可读性太差,后者太冗长)
//NSRange r1 = {2, 4}; // 不用 //NSRange r2 = {.location = 2, .length = 4};// 不用
要掌握下面这个写法,上面的两个不使用
NSRange r3 = NSMakeRange(2, 4); // 掌握
那么在工程中,经常用到的一个查找字符串位置的方法
NSString *str = @"i love oc"; // 查找某个字符串在str中的范围,很常用的一个方法,重要! // 如果找不到,length=0,location=NSNotFound==-1 NSRange range = [str rangeOfString:@"java"]; NSLog(@"loc = %ld, length=%ld", range.location, range.length);
因为,location 是无符号 long 类型,那么-1打印出来会是一个很大的正数。当然,如果最高位按照负数表示了,也就是NSNotFound按照(带符号)整数打印,那么就是-1。
NSPoint \ CGPoint
点结构体
struct CGPoint { CGFloat x; CGFloat y; }; typedef struct CGPoint CGPoint;
还有:
typedef CGPoint NSPoint; typedef struct _NSPoint { CGFloat x; CGFloat y; } NSPoint;
继续查看:
typedef CGFLOAT_TYPE CGFloat;
继续查看:
#define CGFLOAT_TYPE double
本质就是 double 类型
类似 NSRange 结构体
CGPoint p1 = NSMakePoint(10, 10); NSPoint p2 = CGPointMake(20, 20);// 最常用
NSSize \ CGSize
表示 UI 高度,宽度尺寸的结构体,联想记忆。
NSSize s1 = CGSizeMake(100, 50); NSSize s2 = NSMakeSize(100, 50); CGSize s3 = NSMakeSize(200, 60);
CGRect 综合的表示点和尺寸
CGRect r1 = CGRectMake(0, 0, 100, 50); CGRect r2 = { {0, 0}, {100, 90}}; CGRect r3 = {p1, s2};
使用CGPointZero等的前提是添加CoreGraphics框架
CGRect r4 = {CGPointZero, CGSizeMake(100, 90)};
表示原点
CGPointZero == CGPointMake(0, 0);
将结构体转为字符串
//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);
使用这些CGPointEqualToPoint、CGRectContainsPoint等函数的前提是添加CoreGraphics框架
比较两个点是否相同(x、y)
BOOL b = CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));
比较两个矩形是否相同
CGRectEqualToRect(<#CGRect rect1#>, <#CGRect rect2#>)
比较两个位置是否相同
CGSizeEqualToSize(<#CGSize size1#>, <#CGSize size2#>)
x (50, 150) y (40 , 90),看这个矩形里,是否包含某点
BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(60, 45)); NSLog(@"%d", b2);