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 ...
- Objective-C( Foundation框架 一 常见的结构体)
常见的结构体 (NSPoint,CGPoint).(NSRange,CGRange).(NSSize,CGSize) 苹果官方推荐使用CG开头的结构体 NSRange是Foundation框架中常见的 ...
- Foudation框架之一些常用结构体和常用类
表示范围作用的结构体:NSRange: 有三种方式创建新的NSRange: 1.NSRange range: range.location = 17; ...
- object-c 框架之经常使用结构体
Foundation 框架定义经常使用结构体.结构体採用object-c 定义:经常使用NSSRange,NSPoint.NSSize,NSRect等 一.NSRange 创建范围结构体. 方法:NS ...
- 从头开始-07.Foundation框架常用结构体
一.Foundation框架常用结构体NSRange\CGRange.NSPoint\CGPoint.NSSize\CGSize. NSRect\CGRect 的使用 1. 基本使用: //NSRa ...
- IOS 学习笔记 2015-03-24 OC-API-常用结构体
一 标题 常用结构体 二 API 1 NSRange 表示一个范围 A 实例化 NSRange rg={3,5};//第一参数是起始位置第二个参数是长度 B 实例化 NSRange rg2=NSMak ...
- Foundation框架下的常用类:NSNumber、NSDate、NSCalendar、NSDateFormatter、NSNull、NSKeyedArchiver
========================== Foundation框架下的常用类 ========================== 一.[NSNumber] [注]像int.float.c ...
- iOS Foundation 框架概述文档:常量、数据类型、框架、函数、公布声明
iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业 ...
- iOS Foundation 框架基类
iOS Foundation 框架基类 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转 ...
随机推荐
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
代码如下: public int Sum_Solution(int n) { int temp = n; boolean b = (temp>0)&&(temp += Sum_S ...
- QtInternal 之 高效使用QString
注意:本文翻译自 http://developer.qt.nokia.com 中的 UsingQStringEffectively ,中文译文见 简体中文版 ,如果你对翻译wiki感兴趣 ...
- 【原创】一些常用的Vi命令,可帮助脱离鼠标
使用Vi编写代码时,如果想脱离鼠标,需要使用一些命令快捷键,下面罗列了一些常用的并且容易记住的: 1. 命令模式下,移动光标或跳转 0到行首 ^到行首第一个非空字符 $到行尾非空字符 fx向后移动光标 ...
- JavaScript 键盘event.keyCode值列表大全
JavaScript 键盘event.keyCode值列表大全 event.keyCode值列表大全,对于需要根据键盘按键触发相应事件的朋友需要. 网上收集的KeyCode值方便大家查找: k ...
- linux安装mysql出现Could NOT find Curses (missing CURSES_LIBRARY CURSES_INCLUDE_PATH)解决方法
编译 mysql5.6.22 出现以下错误提示: — Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH) CMak ...
- 【转】Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理
Oracle 中的 TO_DATE 和 TO_CHAR 函数oracle 中 TO_DATE 函数的时间格式,以 2008-09-10 23:45:56 为例 格式 说明 显示值 备注 Year(年) ...
- CKEditor配置及使用
注:使用CKEditor版本为js版本的CKEditor 4,所有配置均参考自CKEditor官方API:http://docs.ckeditor.com/,以及实践经验 一.快速使用 1.引入CKE ...
- 【.NET基础】--委托、事件、线程(1)
1,委托 是存放方法的指针的清单,也就是装方法的容器 A, 新建winform项目[01委托],项目中添加dg_SayHi.cs 委托类 用于存储方法 namespace _01委托 { //定义委托 ...
- 跟我一起学习ASP.NET 4.5 MVC4.0(五)(转)
前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...
- 浅谈sql 、linq、lambda 查询语句的区别
浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...