OC常见结构体NSRange、NSPoint、NSSize、NSRect

  1. NSRange:这个结构体有两个成员变量分别是location和length,比如OC字符串@"My name is HeiMa"中‘name’的NSRange为{3,4}(空格也算)C数组中{1,4,6,7,3}6、7的NSRange为{2,2}

    1     // 第一种赋值方式,开发中很少用
    2     NSRange range1 = {2,6};
    3     // 第二种赋值方式,依然很少用
    4     NSRange range2 = {.location = 2,.length = 6};
    5     // 第三种赋值方式,通过系统提供的NSMakeRange()函数来创建一个NSRange。这种方法在开发中比较常见
    6     NSRange range3 = NSMakeRange(2, 6);

    前两种赋值方式跟C语言的结构体变量的初始化很类似,不过在OC中几乎不用,常见的是第三种通过调用函数来创建NSRange。在字符串中我们一般用到的查找其中某个子字符串范围的对象方法为-rangeOfSring:(NSString *)例如

    1     // 创建一个OC字符串
    2     NSString *str = @"My name is Bond";
    3     // 查找字符串@"name"在str中的位置
    4     NSRange range = [str rangeOfString:@"name"];
    5     // 输出range.location和range.length
    6     NSLog(@"location is %ld,length is %ld", range.location, range.length);

    输出结果为:

    2015-04-21 00:53:47.172 OC结构体[2600:536154] location is 3,length is 4      说明:range.location和range.length的数据类型为NSUInteger(即unsigned long)所以占位符为%ld(或者%lu),第四行是创建了一个OC字符串(不可变的),其次要是所找的子字符串不在内部,range.length肯定为0,那么range.location为多少呢?

    1     NSString *str = @"My name is Bond";
    2     // 查找字符串@"zhi"在str中的位置
    3     NSRange range = [str rangeOfString:@"zhi"];
    4     // 输出range.location和range.length
    5     NSLog(@"location is %ld,length is %ld", range.location, range.length);

    输出结果为

    2015-04-21 01:09:28.434 OC结构体[2650:555513] location is 9223372036854775807,length is 0

    为啥是这么大的数呢?因为一旦子字符串不在内部,range.location就是NSNotFound(数值为-1)由于负数在内存中的存储方式与正数的不同才导致了这么一个结果(可以将本题中的range.location强制转换为int类型)

时间: 2024-10-11 14:04:13

OC常见结构体NSRange、NSPoint、NSSize、NSRect的相关文章

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

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

FFmpeg源代码简单分析:常见结构体(AVFormatContext,AVFrame等)的初始化和销毁

本文简单分析FFmpeg常见结构体的初始化和销毁函数的源代码.常见的结构体在文章: <FFMPEG中最关键的结构体之间的关系>中已经有过叙述,包括: AVFormatContext:统领全局的基本结构体.主要用于处理封装格式(FLV/MKV/RMVB等). AVIOContext:输入输出对应的结构体,用于输入输出(读写文件,RTMP协议等). AVStream,AVCodecContext:视音频流对应的结构体,用于视音频编解码. AVFrame:存储非压缩的数据(视频对应RGB/YUV像素

FFmpeg的常见结构体

小程之前介绍过FFmpeg的帧的结构(AVPacket跟AVFrame),帧会在一些流程中使用到. 除了帧结构,FFmpeg还有其它一些结构会在流程中使用到. FFmpeg还有哪些常见的结构呢?先来看一下这个截图: 这张图中的主角,是AVFormatContext.AVFormatContext,是FFmpeg的基本结构之一,对应于封装格式(或容器格式). 围绕FFmpeg的"格式场景",本文介绍FFmpeg常见的数据结构. 按照上图,小程依次介绍图中的几个结构体. (一)AVCode

Foundation-01_结构体NSRange

Foundation框架是其他所有IOS框架的基础 Foundation中常用的结构体: NSRange (location.length) NSPoint\CGPoint NSSize\CGSize NSRect\CGRect NSRange: 有两个成员:location(位置)和length(长度) //下面这两种方法不常用 NSRange r1 = {2,4}; NSRange  r2 = {.location=2 , .length=4}; //常用的是下面这个方法: NSRange

OC——Foundation—结构体

NSRange(是一个结构体) 在Foundation/NSRange.h中对NSRange的定义 typedef struct _NSRange{ NSUInteger location: NSUInteger length: }NSRange: //typedef unsigned long NSUInteger: 这个结构体用来表示事物的一个范围,通常是字符串里的字符范围或者集合里的元素范围 location表示该范围的起始位置 length表示该范围内所包含的元素个数 比如“ I lov

OC基础--结构体 枚举做类成员属性

结构体  枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期  毕业日期  --  结构体 代码示例: 声明文件 Student.h: #import <Foundation/Foundation.h> typedef struct { int year; int month; int day; } Date; typedef enum { kGenderGirl = 0, kGenderBoy = 1, kGenderChunGe = 2 } Gender; @inter

FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)

结构体 初始化 销毁 AVFormatContext avformat_alloc_context() avformat_free_context() AVIOContext avio_alloc_context() AVStream avformat_new_stream() AVCodecContext avcodec_alloc_context3() AVFrame av_frame_alloc(); av_image_fill_arrays() av_frame_free() AVPac

Foundation框架的结构体和集合类

结构体: NSRange      NSPoint        NSSize         NSRect NSRange:表示范围,里面有两个变量(location(位置),length(长度)). 用法:NSRange  变量名  =  NSMakeRange(location , length) 常用于查找某个字符串在某个字符串中的范围 如: NSString *s  = @"wangning"; NSRange range = [s rangeOfString:@"