Sian 发表于 2014-3-22 10:48:25

OC中常用的几个结构体基本说明

本帖最后由 Sian 于 2014-3-22 11:08 编辑

//
//main.m
//NSStruct
//
//Created by yusian on 14-3-21.
//Copyright (c) 2014年 小龙虾论坛. All rights reserved.
//

#import <Foundation/Foundation.h>

int main()
{
   
/**************NSRange***************
系统定义:

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

*/
    // 定义NSRange类型变量并赋值的几种方式:
   
    // 1、直接结构体初始始化赋值
    NSRange r1 = {3, 4};
   
    NSRange r2 = {.location = 3, .length = 4};
   
    // 2、定义结构体,通过结构体访问成员变量赋值
    NSRange r3;
    r3.location = 3;
    r3.length = 4;
   
    // 3、通过特定的方法来赋值
    NSRange r4 = NSMakeRange(3, 4);

//    NSMakeRange实际上是一个实现赋值的函数
//
//    NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {
//      NSRange r;
//      r.location = loc;
//      r.length = len;
//      return r;
//    }
//   
/**********NSPoint/CGPoint**********

typedef CGPoint NSPoint;

struct CGPoint {
    CGFloat x;
    CGFloat y;
};

typedef struct CGPoint CGPoint;

typedef CGFLOAT_TYPE CGFloat;

# define CGFLOAT_TYPE double

从以上可以得出结论:
1、CGPoint == NSPoint
2、CGFloat == double
3、NSPoint即为结构体struct { double x;double y;};
4、该结构体表示一个二维坐标点
*/
    // 1、直接结构体赋值方法
    CGPoint p1 = {10, 15};
    NSPoint p2 = {10, 15};
    CGPoint p3 = {.x = 10, .y = 15};
    NSPoint p4;
    p4.x = 10;
    p4.y = 15;
   
    // 2、使用特定函数赋值
    CGPoint p5 = NSMakePoint(5, 10);
    NSPoint p6 = CGPointMake(4, 19);
    CGPoint p7 = CGPointZero;
    NSPoint p8 = NSZeroPoint;
   
    // 3、将结构体转换换字符串
    NSString * sfp = NSStringFromPoint(p1);
   
    // 4、其他函数:比较两个点是否处于同一位置
    BOOL b1 = CGPointEqualToPoint(p1, p2);
   
/**********NSSize/CGSize**********
typedef CGSize NSSize;

struct CGSize {
    CGFloat width;
    CGFloat height;
};

typedef struct CGSize CGSize;

typedef CGFLOAT_TYPE CGFloat;
   
# define CGFLOAT_TYPE double
   
从以上可以得出结论:
1、CGSize == NSSize
2、CGFloat == double
3、NSSize即为结构体struct { double width; double height;};
4、该结构体表示一对长宽值
*/
    // 1、直接结构体赋值方法
    CGSize s1 = {10, 15};
    NSSize s2 = {.width = 10, .height = 20};
    CGSize s3;
    s3.width = 10;
    s3.height = 5;
   
    // 2、使用特定函数赋值
    CGSize s4 = CGSizeMake(12, 10);
    NSSize s5 = NSMakeSize(12, 10);
    CGSize s6 = CGSizeZero;
    NSSize s7 = NSZeroSize;
   
    // 3、将结构体转换换字符串
    NSString * sfs = NSStringFromSize(s1);
   
    // 4、其他函数:比较两个长宽体是否相等
    BOOL b2 = CGSizeEqualToSize(s1, s2);
   
/**********NSRect/CGRect**********
typedef CGRect NSRect;

struct CGRect {
    CGPoint origin;
    CGSize size;
};

typedef struct CGRect CGRect;

从以上可以得出结论:
1、NSRect == CGRect
2、CGRect为CGPoint与CGSize的集合
3、该结构体表示的是某个物件的位置与大小
*/
    // 1、直接结构体赋值方法
    NSRect rec1 = { {0, 0}, {20, 10} };
    CGRect rec2 = { {0, 0}, {20, 10} };
    NSRect rec3;
    rec3.origin.x = 0;
    rec3.origin.y = 0;
    rec3.size.width = 16;
    rec3.size.height = 9;
    NSRect rec4 = {p1, s1};
    // 2、使用特定函数赋值
    NSRect rec5 = NSMakeRect(0, 0, 20, 10);
    CGRect rec6 = CGRectMake(0, 0, 20, 10);
    NSRect rec7 = {CGPointZero, CGSizeZero};

//该函数实现为:
//   
//    NSRect NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h) {
//      NSRect r;
//      r.origin.x = x;
//      r.origin.y = y;
//      r.size.width = w;
//      r.size.height = h;
//      return r;
//    }
   
    // 3、将结构体转换换字符串
    NSString * sfr = NSStringFromRect(rec1);
   
    // 4、其他函数
    // 比较两个物件是否完全重合
    BOOL b3 = CGRectEqualToRect(rec1, rec2);
   
    // 比较某个点是否处于某个长宽体中
    BOOL b4 = CGRectContainsPoint(rec1, p1);

    return 0;
}
页: [1]
查看完整版本: OC中常用的几个结构体基本说明