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.常用结构体的用法和输出的更多相关文章

  1. iOS Foundation框架 -1.常用结构体的用法和输出

    1.安装Xcode工具后会自带开发中常用的框架,存放的地址路径是: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.plat ...

  2. Objective-C( Foundation框架 一 常见的结构体)

    常见的结构体 (NSPoint,CGPoint).(NSRange,CGRange).(NSSize,CGSize) 苹果官方推荐使用CG开头的结构体 NSRange是Foundation框架中常见的 ...

  3. Foudation框架之一些常用结构体和常用类

    表示范围作用的结构体:NSRange:       有三种方式创建新的NSRange: 1.NSRange range:            range.location = 17;         ...

  4. object-c 框架之经常使用结构体

    Foundation 框架定义经常使用结构体.结构体採用object-c 定义:经常使用NSSRange,NSPoint.NSSize,NSRect等 一.NSRange 创建范围结构体. 方法:NS ...

  5. 从头开始-07.Foundation框架常用结构体

    一.Foundation框架常用结构体NSRange\CGRange.NSPoint\CGPoint.NSSize\CGSize. NSRect\CGRect 的使用 1.  基本使用: //NSRa ...

  6. IOS 学习笔记 2015-03-24 OC-API-常用结构体

    一 标题 常用结构体 二 API 1 NSRange 表示一个范围 A 实例化 NSRange rg={3,5};//第一参数是起始位置第二个参数是长度 B 实例化 NSRange rg2=NSMak ...

  7. Foundation框架下的常用类:NSNumber、NSDate、NSCalendar、NSDateFormatter、NSNull、NSKeyedArchiver

    ========================== Foundation框架下的常用类 ========================== 一.[NSNumber] [注]像int.float.c ...

  8. iOS Foundation 框架概述文档:常量、数据类型、框架、函数、公布声明

    iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业 ...

  9. iOS Foundation 框架基类

    iOS Foundation 框架基类 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转 ...

随机推荐

  1. LINUX HOOK

    http://blog.csdn.net/yyttiao/article/details/7346287

  2. php内核探索

    http://www.nowamagic.net/librarys/veda/special/PHP%E5%86%85%E6%A0%B8%E6%8E%A2%E7%B4%A2 关注PHP 源代码 Zen ...

  3. 引入第三方库错误Undefined symbols for architecture i386: _OBJC_CLASS_$的解决方案

    引起标题上所导致的错误是因为你的第三方库没有放入到Compile Sources里面去. 需要到你项目的Targets>>Build Phases>>Compile Sourc ...

  4. Golang学习 - path/filepath 包

    ------------------------------------------------------------ filepath 中的函数会根据不同平台做不同的处理,比如路径分隔符.卷名等. ...

  5. [golang学习] 在idea中code & debug

    [已废弃]不需要看 idea 虽然审美倒退了n年. 不过功能还是相当好用的. idea 的go插件堪称最好的go ide. 1. 语法高亮支持 2. 智能提示 3. 跳转定义(反跳转回来) 4. 集成 ...

  6. NSTimer定时器的用法

    #import "ViewController.h" @interface ViewController () { NSTimer *countDownTimer; int cou ...

  7. [Java] Serializable(序列化)的理解

    1.序列化是干什么的?       简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存object st ...

  8. 【开源项目6】介绍MenuDrawer这个牛x的控件,实现左右出菜单,上下出菜单

    现在很多应用都很潇洒的从左边屏幕手势一划出个左边的隐藏菜单,右边一划出个隐藏菜单,上边一划出个隐藏菜单,下边一划出个隐藏菜单.或者像android的API16左右的激活列表项的功能.很多人肯定都很着迷 ...

  9. 伪分布式下的hadoop简单配置

    今天大概尝试了一下伪分布式下的hadoop部署,简单的来总结一下 首先我们需要下载hadoop的压缩包文件:http://hadoop.apache.org/releases.html这里是hadoo ...

  10. ajax 请求

    案例: <html><head><script type="text/javascript">function loadXMLDoc(){var ...