您的位置:首页 > 其它

NSPoint、NSSize、NSRect、NSRange使用与Bool细节

2015-06-15 13:04 519 查看
CGPoint跟NSPoint等同,但是一般使用CGPoint,因为CGPoint跨平台

 

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值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: