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

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

在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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。