NSPoint、NSSize、NSRect、NSRange使用与Bool细节
2015-06-15 13:04
519 查看
CGPoint跟NSPoint等同,但是一般使用CGPoint,因为CGPoint跨平台
CGPoint和NSPoint表示一个点
NSSize跟CGSize等同
有两个参数,一个是长,一个是宽
NSRect等价于CGRect
表示的是位置和大小
有两个参数:(CGPoint ,CGSize)
NSRange的定义(按住option键点击鼠标):
可以看出NSRange是一个结构体,所以我们可以通过结构体赋值的方式对NSRange变量进行赋值
这是C语言常用的赋值方式,Foundation中封装了NSMakeRange函数(按住option键,点击鼠标)
所以我们可以通过NSMakeRange函数更方便的使用NSRange
NSRange的使用
bool注意细节
Objective-C中的BOOL使用8为的存储空间,它实际上是一种带符号的字符类型(singed char)的类型定义(typedef)。通过#define指令吧YES定义为1,NO定义为0。Objective-C并不会将BOOL作为仅能保存YES或NO值的真正不二值来处理。编译器会将BOOL认作8位二进制数,YES和NO值只是在习惯上的一种理解。
存在这样一个小问题:如果不小心将一个大于1自己的整型值(比如short或int)复制给一个BOOL变量,那么只有地位自己会用作BOOL值。如果该低位刚好为0(比如8960,写成十六进制为0x2300)BOOL值将会被认作是0,即NO值。
CGPoint和NSPoint表示一个点
//使用事例: CGPointMake(x , y); CGPoint p = CGPointMake( x , y ); //也可以使用: CGPoint p 1= NSMakePoint( x , y);
NSSize跟CGSize等同
有两个参数,一个是长,一个是宽
//创建的方法有: NSSize s=NSMakeSize(w , h); //或者: NSSize s1=CGSizeMake(w , h);
NSRect等价于CGRect
表示的是位置和大小
有两个参数:(CGPoint ,CGSize)
CGRect r1 = CGRectMake(0,0,100,50); //或者: CGRect r = {{0,0},{100,50}}; //再或者: CGPoint p = CGPointMake( x , y ); NSSize s=NSMakeSize(w , h) CGRect r = {p, s};
NSRange的定义(按住option键点击鼠标):
typedef struct _NSRange { NSUInteger location; NSUInteger length; } NSRange;
可以看出NSRange是一个结构体,所以我们可以通过结构体赋值的方式对NSRange变量进行赋值
NSRange b = {1,2}; NSRange c = {.location = 1,.length = 2};
这是C语言常用的赋值方式,Foundation中封装了NSMakeRange函数(按住option键,点击鼠标)
NS_INLINE NSRange NSMakeRange(NSUInteger loc, NSUInteger len) { NSRange r; r.location = loc; r.length = len; return r; }
所以我们可以通过NSMakeRange函数更方便的使用NSRange
NSRange a = NSMakeRange(1,2);
NSRange的使用
NSString *str1 = @"abcdefghigklmn"; NSRange r = [str1 rangeOfString:@"bcde"]; NSLog(@"r.location=%ld,r.length=%ld",r.location,r.length); //打印r.location=1,r.length=4 NSRange r1 = [str1 rangeOfString:@"bcbc"]; NSLog(@"r1.location=%d,r1.length=%ld",(int)r1.location,r1.length); //打印r1.location=-1,r1.length=0当 字符串中不存在时值为NSNotFound NSNotFound的值为-1
bool注意细节
Objective-C中的BOOL使用8为的存储空间,它实际上是一种带符号的字符类型(singed char)的类型定义(typedef)。通过#define指令吧YES定义为1,NO定义为0。Objective-C并不会将BOOL作为仅能保存YES或NO值的真正不二值来处理。编译器会将BOOL认作8位二进制数,YES和NO值只是在习惯上的一种理解。
存在这样一个小问题:如果不小心将一个大于1自己的整型值(比如short或int)复制给一个BOOL变量,那么只有地位自己会用作BOOL值。如果该低位刚好为0(比如8960,写成十六进制为0x2300)BOOL值将会被认作是0,即NO值。
相关文章推荐
- HDU 1224 Free DIY Tour--DP--(bug集锦)
- ajax替换iframe方法
- SQL Server 2005 Reporting Services (x64) on Windows 2K8 -> CleanCurrentUserName() not found
- DevExpress中GridControl中实现checkbox多行选中
- C# 多线程 线程调度Dispatcher ,ManualResetEvent
- Android应用自动更新功能的代码实现
- XXX.java:X: 错误: 程序包javax.servlet不存在
- 我的第一个python程序
- 揭秘刷单产业:月入数万Uber受青睐
- Linux(Ubuntu)下面SecureFX 完全破解
- keil4编程环境技巧1:常用鼠标行首删除整行
- Tiny6410学习笔记1——GPIO
- 大访问量优化整体思路
- LeetCode Missing Ranges [LeetCode Book Problem]
- struts2 标签介绍
- Lucene5.2.0+SQLite Demo
- 实验三:学生工作管理系统asp和asp.cs代码
- CSS定义鼠标移上图片链接,出现边框效果
- 用系统工具sxstrace检查缺少的VC运行时组件
- svn安装插件