Foundation 框架中常用的结构体详解

Foundation 框架包含了很多开发常用的数据类型:

Foundation中包含的数据类型:

结构体

枚举

要想使用 Foundation 中的数据类型,只要包含主头文件即可。

#impot <Foundation/Foundation.h>

结构体:

  我们常用的结构体有:NSRange、NSPoint (CGPint )、NSSize(CGSize)、NSRect(CGRect)

  NSRange:是用来表示位置和范围的。

  本质是:  

1   typedef struct _NSRange {
2       NSUInteger location;
3       NSUInteger length;
4   } NSRange;

 NSRange: 的使用  

  我们常用的几种NSRange类型变量range的赋值方式

  @"i love oc!"  @"love" 的range

  NSRange range = {2, 4};  // 这种方式我们基本不用

  NSRange range = {.location = 2, .length = 4};  // 这种方式我们基本不用

  NSRange range = NSMakeRange(2, 4);  // 这个是我们主要使用的方式,要求熟练掌握。

    // NSRange 的使用
    // 查找一个字符串在另外一个字符串中的位置

    // 定义一个字符串str
    NSString *str = @"i love oc!";

    // 这个是用来获取一个字符串love在另一个字符串str中的range
    NSRange range = [str rangeOfString:@"love"];

    // 将获取的位置和长度输出
    NSLog(@"love在str中的位置是%ld, 长度是%ld",range.location, range.length);   · 我们使用 %ld 主要是因为 range 的成员是 NSUInterger 类型  运行结果是:  2015-01-05 16:04:15.525 Foundation框架[1938:303] lovestr中的位置是2, 长度是4  Program ended with exit code: 0

  当我们要查找的字符串找不到的时候

 1     // NSRange 的使用
 2     // 查找一个字符串在另外一个字符串中的位置
 3
 4     // 定义一个字符串str
 5     NSString *str = @"i love oc!";
 6
 7     // 这个是用来获取一个字符串love在另一个字符串str中的range
 8     NSRange range = [str rangeOfString:@"sb"];
 9
10     // 将获取的位置和长度输出
11     NSLog(@"love在str中的位置是%ld, 长度是%ld",range.location, range.length);
  运行结果是:  2015-01-05 16:05:59.707 Foundation框架[1946:303] lovestr中的位置是9223372036854775807, 长度是0  Program ended with exit code: 0    range.location = NSUInterger = unsigned long  range.location:是一个无符号类型的数据 所以显示的是:9223372036854775807  如果换成有符号的数据,值就是-1;也就等于NSNotFound。  没有找到的时候,location的返回值就是NSNotFound。

NSPoint (CGPint ):用来定义一个坐标,表示UI中的一个元素的位置。

(在开发中我们是使用CGPint 。CGPint是夸平台的,可以在Mac上使用,也可以在ios上使用。)

  本质是:

1   typedef struct _NSPoint {
2       CGFloat x;
3       CGFloat y;
4   } NSPoint;

NSSize(CGSize) :用来定义一个 UI 元素的尺寸的。

(在开发中我们是使用CGSize ,CGSizet是夸平台的,可以在Mac上使用,也可以在ios上使用。)

1   typedef struct _NSSize {
2       CGFloat width;        /* should never be negative */
3       CGFloat height;        /* should never be negative */
4   } NSSize;

NSRect(CGRect):是 NSPoint (CGPint )和 NSSize(CGSize) 的结合体,是用来表示一个UI元素的位置和尺寸。

1   typedef struct _NSRect {
2       NSPoint origin;
3       NSSize size;
4  } NSRect;

Foundation框架中的结构体在使用的过程中,我们使用的最多的方式就是给结构体变量赋值和将结构体转换位字符串输出。

结构体变量的赋值我们使用的是调用一个函数来给结构体变量赋值,而不是使用结构体的性质赋值。

这样可以使代码更加的清晰明了,简洁易懂。

下面是几个函数的定义:

  NSMakeRange

1 NS_INLINE NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {
2     NSRange r;
3     r.location = loc;
4     r.length = len;
5     return r;
6 }

  NSMakePoint

1 NS_INLINE NSPoint NSMakePoint(CGFloat x, CGFloat y) {
2     NSPoint p;
3     p.x = x;
4     p.y = y;
5     return p;
6 }

  CGPointMake

1 CG_INLINE CGPoint
2 CGPointMake(CGFloat x, CGFloat y)
3 {
4   CGPoint p; p.x = x; p.y = y; return p;
5 }

  NSMakeSize

1 NS_INLINE NSSize NSMakeSize(CGFloat w, CGFloat h) {
2     NSSize s;
3     s.width = w;
4     s.height = h;
5     return s;
6 }

  CGSizeMake

1 CG_INLINE CGSize
2 CGSizeMake(CGFloat width, CGFloat height)
3 {
4   CGSize size; size.width = width; size.height = height; return size;
5 }

  NSMakeRect

1 NS_INLINE NSRect NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h) {
2     NSRect r;
3     r.origin.x = x;
4     r.origin.y = y;
5     r.size.width = w;
6     r.size.height = h;
7     return r;
8 }

  CGRectMake

1 CG_INLINE CGRect
2 CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
3 {
4   CGRect rect;
5   rect.origin.x = x; rect.origin.y = y;
6   rect.size.width = width; rect.size.height = height;
7   return rect;
8 }

这个是函数的调用:

    NSRange range = NSMakeRange(NSUInteger loc, NSUInteger len);
    NSPoint point = NSMakePoint(CGFloat x, CGFloat y);
    CGPoint point = CGPointMake(CGFloat x, CGFloat y);
    NSSize size = NSMakeSize(CGFloat w, CGFloat h);
    CGSize size = CGSizeMake(CGFloat width, CGFloat height);
    NSRect rect = NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h);
    CGRect rect = CGRectMake(CGFloat x, <GFloat y, CGFloat width, CGFloat height);

将NSRange、NSPoint、NSSize、NSRect结构体转换位字符串:(我们打印结构体的时候是装换为字符串后在打印)

1     NSString *str = NSStringFromRange(NSRange range);
2     NSString *str = NSStringFromPoint(NSPoint aPoint);
3     NSString *str = NSStringFromSize(NSSize aSize);
4     NSString *str = NSStringFromRect(NSRect aRect);
时间: 2024-08-02 11:02:28

Foundation 框架中常用的结构体详解的相关文章

Foundation 框架中NSString and NSMutableString的详解

NSString:不可变字符串 创建字符串的最简单的方式: NSString *str = @"itcast"; // 这个创建的是OC字符串 oc中的字符串都是NSString类的对象 char *name = "itcast"; // 这个是c语言字符串 NSLog(@"我在%@上课",str): // %@是用来输出oc对象的 NSLog(@"%s",name); // %s是用来输出c语言字符串 使用oc字符串的好处:

Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect

1   NSRange NSRange 的原型为 typedef struct _NSRange { NSUInteger location; NSUInteger length; } NSRange; NSMakeRange的函数 NS_INLINEz是内联函数 typedef NSRange *NSRangePointer; NS_INLINE NSRange NSMakeRange(NSUInteger loc, NSUInteger len) { NSRange r; r.locatio

NetBios 的结构体详解(网络控制块NCB)

对之前网络基础编程用到控制块NCB进行介绍(补充): 在Win32环境下,使用VC++6.0进行NetBIOS程序开发时, 需要用到nb30.h文件和netapi32.lib静态链接库.前者定义了NetBIOS的所有函数声明和常数定义,后者定义了NetBIOS应用. Ncb的结构在nb30.h文件中定义.Ncb结构的定义:Ncb有64个字符,分为14个域(或称为字段)和一个10字节的保留域,表2.1显示了Ncb和它的域. 域名及字节偏移量说明. 各个命令详细说明: 1. 命令 NetBIOS命令

NetBios 的结构体详解

[NetBios 的结构体详解] 1.结构体. 2.命令 NetBIOS命令的使用方式有两种,即等待和非等待(或称为同步与异步)方式. 如果命令码的高阶位是0时是等待方式,命令将阻止提交命令的应用程序继续执行,直到该NetBIOS命令执行完毕后才允许这个应用程序继续执行.NetBIOS每次只能处理一个等待方式命令. 如果命令码的高阶位是二进制1时则是非等待方式,命令由NetBIOS在内部排队,并不阻止提交命令的应用程序继续执行.应用程序可通过对命令结束标志字段值的轮询来了解命令执行的状态(详见命

Oracle中常用的to_Char用法详解

Oracle中常用的to_Char用法详解(有FMT的详细列表) The following are number examples for the to_char function. to_char(1210.73, '9999.9') would return '1210.7' to_char(1210.73, '9,999.99') would return '1,210.73' to_char(1210.73, '$9,999.00') would return '$1,210.73'

struct sk_buff结构体详解

struct sk_buff是linux网络系统中的核心结构体,linux网络中的所有数据包的封装以及解封装都是在这个结构体的基础上进行. struct sk_buff_head  {     struct sk_buff *next;     struct sk_buff *prev;          __u32 qlen;     spinlock_t lock; } struct sk_buff {     struct sk_buff *next;     struct sk_buff

linux内核中的struct rlimit结构体详解

   在linux内核中,对一个进程获取系统资源的数量进行了限制.那么linux内核是如何实现这种对一个进程的各种资源的限制呢?    linux使用struct rlimit结构体来实现的,rlimit是 resource limit的缩写.    struct rlimit           {               unsigned int rlim_cur;  /* soft limit */               unsigned int rlim_max;  /* ha

struct socket结构体详解

在内核中为什么要有struct socket结构体呢?    struct socket结构体的作用是什么?    下面这个图,我觉得可以回答以上两个问题.      由这个图可知,内核中的进程可以通过使用struct socket结构体来访问linux内核中的网络系统中的传输层.网络层.数据链路层.也可以说struct socket是内核中的进程与内核中的网路系统的桥梁.   struct socket {      socket_state  state; // socket state  

Linux进程描述符task_struct结构体详解--Linux进程的管理与调度(一)【转】

Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息.它定义在include/linux/sched.h文件中. 谈到task_struct结构体,可以说她是linux内核源码中最复杂的一个结构体了,成员之多,占用内存之大. 进程状态 /* * Task state bitmask. NOTE! These bits are also * encoded in fs/proc/array.c: get_task_state().