Objective-C结构体NSRange、NSPoint、NSSize与CGRect用法详解

Ivy
Ivy
发布时间:2026-10-13 | 3人浏览过
原创

在Objective-C程序开发中,处理视图布局、文本编辑以及动画轨迹时,频繁需要使用系统定义的基础结构体。本文深入解析NSRange、NSPoint、NSSize(及iOS下的CGSize)和CGRect这四个核心结构体的内存定义、快捷创建工厂函数以及日志输出技巧。

1. NSRange:表示范围区间

NSRange主要用于描述数据在序列中的位置跨度,例如字符串的子串截取或数组元素的提取。其内部仅包含两个NSUInteger类型的成员。

第1步:理解NSRange原型与构造

NSRange由“起点”和“长度”组成,直接赋值时需分别指定。推荐使用宏函数NSMakeRange进行初始化,代码更简洁:

// 直接定义并赋值
NSRange range;
range.location = 8;
range.length = 10;

// 使用工厂函数快速创建
range = NSMakeRange(8, 10); // location: 8, length: 10

第2步:打印与调试

由于NSRange是结构体而非对象,直接使用%@打印会报错。必须通过NSStringFromRange将其转换为可读的字符串:

NSString* str = NSStringFromRange(range);
NSLog(@"rang is %@", str);

2. NSPoint 与 CGPoint:定义二维坐标点

这两个结构体用于表示空间中的一个绝对位置(x轴与y轴)。在Mac OS X环境下常称NSPoint,在iOS环境下习惯使用别名CGPoint,两者实质相同。

第1步:坐标点的声明与创建

结构体定义包含CGFloat类型的横纵坐标:

struct CGPoint {
    CGFloat x;
    CGFloat y;
};

创建点位通常使用以下两种工厂函数,效果一致:

// 方式一:手动赋值
NSPoint point; 
point.x = 10;
point.y = 10;

// 方式二:使用快捷函数
point = NSMakePoint(10, 18);      // Mac常用
point = CGPointMake(29, 78);      // iOS常用

第2步:坐标信息的字符串化

同样,使用NSStringFromPoint进行格式化输出:

NSString* str = NSStringFromPoint(point);
NSLog(@"point is %@", str);

3. NSSize 与 CGSize:定义宽高尺寸

该结构体专门用于记录对象的宽(width)和高(height),不包含位置信息。对应于前面的坐标概念,分别为Mac环境的NSSize和iOS环境的CGSize。

第1步:尺寸的构建逻辑

通过赋给两个CGFloat成员来设定大小:

NSSize size;
size.width = 100;
size.height = 12;

// 使用内置宏快速生成
size = NSMakeSize(12, 12);
size = CGSizeMake(11, 11); // iOS场景更常用

第2步:尺寸值的获取

借助工具函数NSStringFromSize将尺寸转为文字以便追踪:

NSString* str = NSStringFromSize(size);
NSLog(@"%@");

4. CGRect:结合位置的完整矩形

CGRect是前文提到的CGPoint与NSSize/CGSize的组合体,完整定义了一个矩形区域的空间属性。它是UIKit和AppKit中最常用的绘图结构。

第1步:CGRect的内部构成

它包含原点origin(类型为CGPoint)和大小size(类型为NSSize):

struct CGRect {
    CGPoint origin; // 位置坐标
    CGSize size;    // 尺寸大小
};

第2步:矩形区域的快速创建

手动修改内部属性较为繁琐,推荐直接使用四参数工厂函数CGRectMake或NSMakeRect:

// 完整参数:x, y, width, height
rect = CGRectMake(12, 12, 12, 12);
rect = NSMakeRect(11, 11, 11, 11); // Mac兼容写法

第3步:矩形的调试输出

使用对应的转换函数,查看完整的矩形配置:

NSString* str5 = NSStringFromRect(rect);
NSLog(@"rect is %@", str5);

总结

在Objective-C开发中,熟练掌握这些基础结构体的区别至关重要。需要表达数据索引范围时选用NSRange;确定绝对定位时选用NSPoint/CGPoint;记录独立的大小时选用NSSize/CGSize;而在视图层级管理中,几乎都需要组合使用的CGRect。同时,利用Xcode提供的NSStringFrom...系列函数配合NSLog,可以大幅降低结构体状态排查的难度。

以上就是Objective-C结构体NSRange、NSPoint、NSSize、CGRect实例分析的详细内容,更多关于Objective-C结构体用法的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表