年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4139|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

    发表于 2014-3-22 10:48:25 | 显示全部楼层 |阅读模式
    本帖最后由 Sian 于 2014-3-22 11:08 编辑
    1. //
    2. //  main.m
    3. //  NSStruct
    4. //
    5. //  Created by yusian on 14-3-21.
    6. //  Copyright (c) 2014年 小龙虾论坛. All rights reserved.
    7. //
    8. #import <Foundation/Foundation.h>
    9. int main()
    10. {
    11.    
    12. /**************NSRange***************
    13. 系统定义:
    14. typedef struct _NSRange {
    15.     NSUInteger location;
    16.     NSUInteger length;
    17. } NSRange;
    18. */
    19.     // 定义NSRange类型变量并赋值的几种方式:
    20.    
    21.     // 1、直接结构体初始始化赋值
    22.     NSRange r1 = {3, 4};
    23.    
    24.     NSRange r2 = {.location = 3, .length = 4};
    25.    
    26.     // 2、定义结构体,通过结构体访问成员变量赋值
    27.     NSRange r3;
    28.     r3.location = 3;
    29.     r3.length = 4;
    30.    
    31.     // 3、通过特定的方法来赋值
    32.     NSRange r4 = NSMakeRange(3, 4);
    33. //    NSMakeRange实际上是一个实现赋值的函数
    34. //
    35. //    NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {
    36. //        NSRange r;
    37. //        r.location = loc;
    38. //        r.length = len;
    39. //        return r;
    40. //    }
    41. //   
    42. /**********NSPoint/CGPoint**********
    43. typedef CGPoint NSPoint;
    44. struct CGPoint {
    45.     CGFloat x;
    46.     CGFloat y;
    47. };
    48. typedef struct CGPoint CGPoint;
    49. typedef CGFLOAT_TYPE CGFloat;
    50. # define CGFLOAT_TYPE double
    51. 从以上可以得出结论:
    52. 1、CGPoint == NSPoint
    53. 2、CGFloat == double
    54. 3、NSPoint即为结构体struct { double x;  double y;};
    55. 4、该结构体表示一个二维坐标点
    56. */
    57.     // 1、直接结构体赋值方法
    58.     CGPoint p1 = {10, 15};
    59.     NSPoint p2 = {10, 15};
    60.     CGPoint p3 = {.x = 10, .y = 15};
    61.     NSPoint p4;
    62.     p4.x = 10;
    63.     p4.y = 15;
    64.    
    65.     // 2、使用特定函数赋值
    66.     CGPoint p5 = NSMakePoint(5, 10);
    67.     NSPoint p6 = CGPointMake(4, 19);
    68.     CGPoint p7 = CGPointZero;
    69.     NSPoint p8 = NSZeroPoint;
    70.    
    71.     // 3、将结构体转换换字符串
    72.     NSString * sfp = NSStringFromPoint(p1);
    73.    
    74.     // 4、其他函数:比较两个点是否处于同一位置
    75.     BOOL b1 = CGPointEqualToPoint(p1, p2);
    76.    
    77. /**********NSSize/CGSize**********
    78. typedef CGSize NSSize;
    79. struct CGSize {
    80.     CGFloat width;
    81.     CGFloat height;
    82. };
    83. typedef struct CGSize CGSize;
    84. typedef CGFLOAT_TYPE CGFloat;
    85.    
    86. # define CGFLOAT_TYPE double
    87.    
    88. 从以上可以得出结论:
    89. 1、CGSize == NSSize
    90. 2、CGFloat == double
    91. 3、NSSize即为结构体struct { double width; double height;};
    92. 4、该结构体表示一对长宽值
    93. */
    94.     // 1、直接结构体赋值方法
    95.     CGSize s1 = {10, 15};
    96.     NSSize s2 = {.width = 10, .height = 20};
    97.     CGSize s3;
    98.     s3.width = 10;
    99.     s3.height = 5;
    100.    
    101.     // 2、使用特定函数赋值
    102.     CGSize s4 = CGSizeMake(12, 10);
    103.     NSSize s5 = NSMakeSize(12, 10);
    104.     CGSize s6 = CGSizeZero;
    105.     NSSize s7 = NSZeroSize;
    106.    
    107.     // 3、将结构体转换换字符串
    108.     NSString * sfs = NSStringFromSize(s1);
    109.    
    110.     // 4、其他函数:比较两个长宽体是否相等
    111.     BOOL b2 = CGSizeEqualToSize(s1, s2);
    112.    
    113. /**********NSRect/CGRect**********
    114. typedef CGRect NSRect;
    115. struct CGRect {
    116.     CGPoint origin;
    117.     CGSize size;
    118. };
    119. typedef struct CGRect CGRect;
    120. 从以上可以得出结论:
    121. 1、NSRect == CGRect
    122. 2、CGRect为CGPoint与CGSize的集合
    123. 3、该结构体表示的是某个物件的位置与大小
    124. */
    125.     // 1、直接结构体赋值方法
    126.     NSRect rec1 = { {0, 0}, {20, 10} };
    127.     CGRect rec2 = { {0, 0}, {20, 10} };
    128.     NSRect rec3;
    129.     rec3.origin.x = 0;
    130.     rec3.origin.y = 0;
    131.     rec3.size.width = 16;
    132.     rec3.size.height = 9;
    133.     NSRect rec4 = {p1, s1};
    134.     // 2、使用特定函数赋值
    135.     NSRect rec5 = NSMakeRect(0, 0, 20, 10);
    136.     CGRect rec6 = CGRectMake(0, 0, 20, 10);
    137.     NSRect rec7 = {CGPointZero, CGSizeZero};
    138. //该函数实现为:
    139. //   
    140. //    NSRect NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h) {
    141. //        NSRect r;
    142. //        r.origin.x = x;
    143. //        r.origin.y = y;
    144. //        r.size.width = w;
    145. //        r.size.height = h;
    146. //        return r;
    147. //    }
    148.    
    149.     // 3、将结构体转换换字符串
    150.     NSString * sfr = NSStringFromRect(rec1);
    151.    
    152.     // 4、其他函数
    153.     // 比较两个物件是否完全重合
    154.     BOOL b3 = CGRectEqualToRect(rec1, rec2);
    155.    
    156.     // 比较某个点是否处于某个长宽体中
    157.     BOOL b4 = CGRectContainsPoint(rec1, p1);
    158.     return 0;
    159. }
    复制代码
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-4-20 06:38 , Processed in 0.048160 second(s), 23 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表