iOS Foundation框架 -1.常用结构体的用法和输出
1.安装Xcode工具后会自带开发中常用的框架,存放的地址路径是:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/
2.在iOS开发中所有框架中Foundation框架是最基础的框架,Foundation框架里面包含了常用的类和数据类型比如结构体、枚举等
3.使用Foundation框架只要包含它的主头文件<Foundation/Foundation.h>即可,主头文件里面包含了框架中所有内容的头文件
4.Foundation框架中常用的结构体:
NSRange、NSPoint\CGPoint、NSSize\CGSize、NSRect\CGRect
(1) 一般结构体的用法如下:

// 定义结构体
struct Date {
int year;
int month;
int day;
}; // 依次按照结构体顺序为结构体赋值
struct Date date = {,,}; // 不按结构体顺序为结构体赋值
struct Date date2 = {.year=, .day=, .month=};

(2) NSRange结构体:用来描述范围
- 查看官方定义的NSRange

// 用于查看范围
typedef struct _NSRange {
NSUInteger location; // 起始位置
NSUInteger length; // 长度
} NSRange; // NSUInteger 类型为无符号类型,可以简单理解为表示正整数的类型,在NSLog输出时用ld

- NSRange的简单说明和用法

// 比如想查看字符串"I like oc"中的like在整个字符串中的范围,有三种实现方式:
// 字符串总的起始位置为0空格也要计算,那么love的起始位置为2,当然love的长度为4
// 下面两种实现都是使用为NSRange结构体赋值的方式来实现
NSRange r1 = {,}; // 不推荐使用
NSRange r2 = {.location = , .length = }; // 不推荐使用
// 第三种实现方式是调用NSMakeRange()函数来实现
NSRange r3 = NSMakeRange(, ); // 推荐使用

- 查找NSString类对象中某些字符在整个类对象中的NSRange

// 比如想查看字符串"I like oc"中的like在整个字符串中的范围
NSString *str = @"I like oc"; // NSString类的分类已经对这种需求做了实现 因此可以直接调用类方法来实现
NSRange range = [str rangeOfString:@"like"]; // 打印的NSRange结构体中的变量由于都是NSUInteger类型 因此在输出时用ld
NSLog(@"location = %ld, length = %ld",range.location,rang.length);

注意:如果没有找到要查找的值NSRange中的length = 0, location = NSNotFound,其中NSNotFound如果以NSLog(@"%d",NSNotFound); 输出一长串 数字;而如果以 NSLog(@"%d",NSNotFound); 输出的就是 -1
(3)NSPoint结构体:通过一个点坐标来标识元素位置
- 官方定义的NSPoint

// 设置 double 类型的别名为 CGFLOAT_TYPE
# define CGFLOAT_TYPE double // 定义CGFloat类型为double类型
typedef CGFLOAT_TYPE CGFloat; // 定义CGPoint结构体
struct CGPoint {
CGFloat x;
CGFloat y;
}; // 定义CGPoint结构体为CGPoint类型
typedef struct CGPoint CGPoint; // 设置结构体CGPoint = NSPoint
typedef CGPoint NSPoint; 总结:可以看出CGPoint = NSPoint 本质都是结构体,里面包含了两个double类型来描述一个点

- NSPoint的一般用法
// 同一个点的两种表现方式
CGPoint point = NSMakePoint(, ); // 不常用
NSPoint point2 = CGPointMake(, ); // 常用 // CGPointZero == CGPointMake(0,0);
(3)NSSize结构体:描述元素的尺寸(宽和高),定义和NSPoint类似不再赘述,一般用法为:
CGSize size = NSMakeSize(, );
NSSize size2 = CGSizeMake(, ); // 常用
(4)CGRect结构体:用于描述元素的位置(CGPoint)和尺寸(CGSize),因此可以说CGRect是描述了一个在手机屏幕上的矩形
- 官方定义的CGRect
struct CGRect {
CGPoint origin; // 描述元素位置坐标
CGSize size; // 描述元素尺寸
};
typedef struct CGRect CGRect;
- 一般用法
// 描述一个坐标位置为(20,20)宽高分别为50和100的元素
CGRect rect = CGRectMake(, , , ); // 常用
NSRect rect2 = NSMakeRect(, , , );
- 其他用法

CGRectZero == CGRectMake(0,0,0,0);
CGSizeZero == CGSizeMake(0,0);
CGPointZero == CGPointMake(0,0); // 第一种写法:坐标为(20,20)宽高分别为50和100
CGRect rect = {{,},{,}}; // 第二种写法:坐标为(20,20)宽高分别为50和100
NSPoint point = CGPointMake(, );
NSSize size = CGSizeMake(, );
CGRect rect2 = {point,size}; // 第三种写法:坐标为(0,0)宽高分别为50和100
CGRect rect3 = {CGPointZero,CGSizeMake(, )};

(5)模拟函数CGRectMake的实现过程

// 模拟CGRectMake方法的实现
CGRect CGRectMake2(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
{
// 定义一个CGRect类型的结构体rect
CGRect rect; // 为结构体内部坐标x/y赋值
rect.origin.x = x;
rect.origin.y = y; // 为结构体内部迟钝坐标width/height赋值
rect.size.width = width;
rect.size.height = height; return rect;
} // 依照这一逻辑:CGPointMake函数、CGSizeMake函数都可以模拟实现

5.如何快速查看结构体中的值
- 第一种方式:从结构体中将值依次取出来
NSRect rect = CGRectMake(, , , );
NSLog(@"x = %f, y = %f, width = %f, height = %f",rect.origin.x, rect.origin.y
, rect.size.width, rect.size.height); // 这里的. 不是get方法只是单纯的从结构体中获取值而已
- 第二种方式:将结构体直接转换为字符串后打印

NSRect rect = CGRectMake(, , , );
// 先将结构体转换称为字符串
NSString *strRect = NSStringFromRect(rect);
// 直接打印转换后的字符串
NSLog(@"%@",strRect);
// NSSize/NSPoint这两种结构体NSStirng也提供了类似的方法

6.结构体比较常用的函数
- 结构体常用函数是在CoreGraphics.framework框架下面,因此需要先添加框架


- 较常用的方法

// 1.判断两个点的位置是否相等
BOOL pointIsEqual = CGPointEqualToPoint(CGPointMake(, ), CGPointMake(, ));
NSLog(@"%d",pointIsEqual); // 2.判断尺寸大小是否相等
BOOL sizeIsEqual = CGSizeEqualToSize(CGSizeMake(, ), CGSizeMake(, ));
NSLog(@"%d",sizeIsEqual); // 第一种写法:坐标为(20,20)宽高分别为50和100
CGRect rect1 = {{,},{,}};
// 第二种写法:坐标为(20,20)宽高分别为50和100
NSPoint point = CGPointMake(, );
NSSize size = CGSizeMake(, );
CGRect rect2 = {point,size}; // 3.判断两个矩形是否相等
BOOL rectIsEqual = CGRectEqualToRect(rect1, rect2);
NSLog(@"%d",rectIsEqual); // 4.判断一个点是否在矩形上面
BOOL isContent = CGRectContainsPoint(rect1, CGPointMake(, ));
NSLog(@"%d",isContent);
iOS Foundation框架 -1.常用结构体的用法和输出的更多相关文章
- iOS Foundation框架简介 -1.常用结构体的用法和输出
1.安装Xcode工具后会自带开发中常用的框架,存放的地址路径是: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.plat ...
- [OC Foundation框架 - 1] 常用结构体
底层封装是使用了typedef定义的结构体 typedef struct _NSString{ xxx xxx } NSString; 1. NSRange 结构体 #注意结构体不是对象 3种定义 ...
- iOS Foundation框架 -2.常用集合类简单总结
Foundation框架中常用的类有:NSString.NSArray.NSSet.NSDictionary 以及它们对应的子类 NSMutableString.NSMutableArray.NSMu ...
- Objective-C基础笔记(7)Foundation中的常用结构体
一.NSRange NSRange的定义: typedef struct _NSRange { NSUInteger location; NSUInteger length; } NSRange; N ...
- 从头开始-07.Foundation框架常用结构体
一.Foundation框架常用结构体NSRange\CGRange.NSPoint\CGPoint.NSSize\CGSize. NSRect\CGRect 的使用 1. 基本使用: //NSRa ...
- iOS Foundation 框架概述文档:常量、数据类型、框架、函数、公布声明
iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业 ...
- iOS Foundation 框架基类
iOS Foundation 框架基类 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转 ...
- Foudation框架之一些常用结构体和常用类
表示范围作用的结构体:NSRange: 有三种方式创建新的NSRange: 1.NSRange range: range.location = 17; ...
- 八、Foundation -常用结构体
一.NSRange 在foundation/NSRange.h中对NSRange的定义 typedef struct _NSRange{ NSUInteger location; NSUInteger ...
随机推荐
- 微信小程序一些简单的快捷键
常用快捷键 格式调整 Ctrl+S:保存文件Ctrl+[, Ctrl+]:代码行缩进Ctrl+Shift+[, Ctrl+Shift+]:折叠打开代码块Ctrl+C Ctrl+V:复制粘贴,如果没有选 ...
- Android开发之FileProvider
最近做项目时,都需要用到FileProvider.于是就研究了下,现总结如下: 官方路径:http://developer.android.com/intl/zh-cn/training/secure ...
- java 生成不重复的随机数
import java.text.SimpleDateFormat;import java.util.Date; public class Test2 { public static void mai ...
- iOS开发——九切片
这个虽然就我来说,感觉它没啥用,但还是放这吧,有时间了把内容补上.
- java实现gbdt
DATA类 import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import ...
- Unity3D ——强大的跨平台3D游戏开发工具(五)
第九章 图形用户界面类G.U.I 您在玩很多3D游戏的时候,不知是否注意到在游戏界面中,总有一些图形和文字信息是不随着3D视角的改变而改变的.这也是由于游戏本身的要求而决定的.比如说英雄的生命值,聊天 ...
- Windows 7 Professional安装多语言包
本文出自 "王春海的博客" 博客,请务必保留此出处http://wangchunhai.blog.51cto.com/225186/223635 下载了Windows 7 Prof ...
- Android组件生命周期(三)
Android系统试图尽可能长地保持一个应用程序进程,但是当内存低时它最终还是需要移除旧的进程.为了决定保持哪个进程及杀死哪个进程,Android将每个进程放入一个基于运行于其中的组件的重要性等级和这 ...
- mysql 视图示例
基本操作 建立视图 CREATE VIEW view_test(qty,price,total) AS SELECT quantity,price,quantity*price FROM t; 多表视 ...
- Unity 压缩texture
当我们往服务器保存图片时 并不会仅仅保留原图 一般会另外保存一张缩略图 当加载文件夹时只加载缩略图 当在点击缩略图打开图片时 再加载原缩略图 以节省时间和内存 下面以将屏幕截图保存到服务器为例 将屏幕 ...