Foundation_01_NSRange_CGPint_CGSize
一、NSRange
1.1、结构体 NSRange
typedef struct _NSRange
{
unsigned int location;
unsigned int length;
}NSRange;
这是一个用结构体来表示相关事物的范围,通常是字符串里面的字符范围,或者数组的元素范围。
1.2、NSRange的三种定义方式
1.2.1、NSRange的第一种定义方式,直接赋值
NSRange range;
range.location = 2;
range.length = 4;
1.2.2、NSRange的第二种定义方式,使用C语言的聚合结构赋值机制
NSRange range = {2,4};
1.2.3、NSRange的第三种定义方式,使用Cocoa的NSMakeRange()函数,好处在于任何能够使用函数的地方都能够使用NSMakeRange
NSRange range = NSMakeRange(2,4);
1.2.4、代码实例:
// main.m
// 08_Foundation01
// Created by 杞文明 on 15/8/14.
// Copyright (c) 2015年 杞文明. All rights reserved.
#import <Foundation/Foundation.h>
void testXmNSRange(){
NSString *textStr = @"wo_shi_xiao_ming";
//1.NSRange的第一种方式 :直接赋值
NSRange range1;
range1.location = 7;
range1.length = 4;
NSLog(@"------%@",[textStr substringWithRange:range1]);
//2.NSRange的第二种定义方式:C语言的聚合结构
NSRange range2 = {2,5};
NSLog(@"------%@",[textStr substringWithRange:range2]);
//3.NSRange的第三种定义方式:Cocoa提供的快捷函数
NSRange range3 = NSMakeRange(6, 3);
NSLog(@"------%@",[textStr substringWithRange:range3]);
}
int main(int argc, const char * argv[]) {
testXmNSRange();
return 0;
}
二、几何数据类型——CGPint和CGSize
处理几何图形的数据类型,他们的名称前面都带有CG前缀,如CGPint和CGSize。这些类型是由Core Graphics框架提供的,用来进行2D渲染的。Core Graphics是用C语言写的,因此可以在代码中使用C语言的数据类型。
2.1 CGPint表示的是笛卡尔平面中的一个坐标(x,y)
struct CGPint
{
float x;
float y;
}
CGSize用来存储长度和宽度
struct CGSize
{
float width;
float height;
}
Cocoa中提供了一个矩形数据类型,它由坐标和大小符合而成
struct CGRect
{
CGPint origin;
CGSize size;
}
2.2说明
为什么这些数据类型是C的struct结构体而不是对象呢?原因在于性能。程序(尤其是GUI程序)会使用到许多临时坐标、大小和矩形区域来完成工作。记住,所有的Objective-c对象都是动态分配的,而动态分配是一个代价较大的操作,它会消耗大量的时间。所以将这些结构体创建成第一级的对象会在使用过程中大大增加系统开销。