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) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转 ...
随机推荐
- LeetCode13 Roman to Integer
题意: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from ...
- 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化
1. 首先, JavascriptSerializer类所在名空间: using System.Web.Script.Serialization; 2. 相关的3篇文章, 标记下: 使用JavaScr ...
- C#基础--struct(结构体)
结构体和类有点类似 我们定义一个类的时候 是class 类名 定义结构体的时候是 struct 结构体名 结构体的写法 struct Point { // public int ...
- ScrollView嵌套ListView的滑动冲突问题,是看大神的方法的,作为学习以后用的到
在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollView嵌套ListView结 ...
- [Javascript] “||”和“&&”的灵活运用
引用URL : http://my249645546.iteye.com/blog/1553202 你是否看到过这样的代码:a=a||""; 可能javascript初学者会对此感 ...
- jQuery实现轮播图效果
通过改变背景色来达到效果,有下角标和左右箭头,都已经实现. html部分: <!DOCTYPE html> <html> <head> <meta chars ...
- 用bootstrapValidator来验证UEditor
我们的项目使用了bootstrapValidator来作为前端校验,但是表单里面有一个UEditor,它用bootstrapValidator是没有效果的,为了页面风格统一,只好修修改改咯 首先来看一 ...
- 补充:tableView优化总结
tableView优化方式总结 (说明:一下只是我自己的小总结,会有不足,望大神指正,多谢大家了) 1 缓存 cell 的行高.目的方便第二遍访问 cell. 2 减少图片的blend 操作.包括:设 ...
- c#入门实例
1.概述 C#是一个语言,.net是一个平台,上面支持用C#或者VB.Net写代码 2.注释 若注释量较少用 // 开头,大量用 /* */ 表示 输出结果 3.命名空间 所谓n ...
- 转 【O2O案例】汽车后市场垂直化电子商务:平业模式解析
核心提示:一.商业模式简介.汽车后市场垂直化电子商务是我在2010年初开始筹划,起因是在淘宝工作期间运营汽车类目后遇到很多问题无决,由于 一.商业模式简介. 汽车后市场垂直化电子商务是我在2010年初 ...