Foundation框架

Foundation 框架中有很多对象方法和类方法,其中很多方法都是以后开发常用的工具,特别是几个集合类。

 1>:NSRange 是一个结构体,里面有两个unsigned long 类型的属性,location , length  表示坐标和长度,表示一个     范围。

2>:NSPoint 或者 CGPoint 里面有两个unsigned long类型的属性,x, y 表示一个点的坐标。

3>:NSSize   或者 CGSize里面有两个unsigned long类型的属性 width , height 表示尺寸。

4>:NSRect    或者 CGRect里面有个NSPoint类型的属性,origin 和一个NSSize 类型的属性 size.

NSRange 可以用来计算一个字符串的范围

基本用法:

1:@"i love  ios "  中love 的范围

NSRange  r = {2,4 };

//  2 表示的是Location 位置是2 ,4 表示length 长度是4 ,在计算location 时,空格也计算在内

2:NSRange r2 = {.location 2 , .length = 4 };

//  这种赋值方式,类似于C中的数组,但是这种方式一般不用

3:也可以类似于函数使用

NSRange r3 = NSMakeRange(2,4);

//  调用了NSRange 的一个方法

查找某个字符串字符中的范围

NSString * s = @" i love  ios ";

NSRange  range = [s  rangeofstring:@"love"];di

// 调用方法计算出字符串的所在范围

// 如果找不到这个字符串,就会返回0;此时location == NSNotFound

NSPoint的基本用法:

一般用CGPoint 表示

1:NSPoint p1 = NSMakePoint(10,10);

// 表示创建了一个点,这个点的坐标是 x = 10, y = 10;

也可以用 CGPoint p 表示

2:CGPoint p2 =  CGPointMake (10,10);

1与2 等价

NSSize 和 CGSize

基本使用:

1:NSSize s =  NSMakeSize(100,20);

//  创建一个新的NSSize类型,weight  =  100, height = 20'

2:CGSize s1= CGSizeMake (100,20);

  //  与1 等价

NSRect  和 CGRect 

基本使用

 赋值方式:

CGRect r1 = CGRectMake(0,0,0,0);

//  调用方法

CGRect r2 = {{0,0},{2,3}};

// 因为他里面的两个属性也是结构体类型

CGRect r3 = {p,s1};

//  利用上面创建好的结构体类型的变量

1:CGRect r1 = (0,0,0,0 );

// 创建的这个新集合是原点

输出时:

NSLog (@"x = %@,y = %@",r1.origin, r1.size);

2:上面的这种方法较为麻烦,可以改为

NSString * s = NSStringFromPoint(p);

//  将CGPoint 类型的数据转换成字符串

NSLog (@"%@",s );

//  利用输出字符串,直接输出一个CGPoint 类型的数据

NSString * s2 = NSStringFromSize(s1);

// 将CGSize 类型的数据转换成字符串

NSLog (@"%@",s2 );

// 利用输出字符串,直接输出一个CGSize 类型的数据

NSString * s3 = NSStringFromRect(s1);

// 将CGRect 类型的数据转换成字符串

NSLog (@"%@",s 3);

利用输出字符串,直接输出一个CGRect类型的数据

几个常用方法:

1:CGSizeZero 就相当于 CGSizeMake(0,0);

2:CGRectZero  就相当于 CGRectMake(0,0);

3: CGPointZero    就相当于 CGPointMake(0,0);

使用:

CGRect r4 = { CGPointZero ,CGSizeMake(20,40);

4:CGPointEqualToPoint (CGPointMake(10,4),CGPointMake(6,0));

//  判断两个点是否相同

5:CGSizeEqualToSize (CGSizeMake(10,4),CGSizeMake(6,0));

//  判断两个尺寸是否相同

6:CGRectEqualToRect(CGRectMake(10,4),CGRectMake(6,0));

//  判断两个范围是否相同

7:CGRectContainsPoint (CGRect   rect, CGPoint  point);

//  判断一个点是否在一个范围内

例如:

CGRectContainsPoint (CGRectMake(40,30) , CGPointMake(50,70));

// 返回值是BOOL类型

NSString 类

NSString包括了1:NSMutableString  

             //  可变字符串

              2:NSString

             //  不可变字符串

创建方式有:

1:NSString *s = @"jack";

//  最直接的一种方式

2: NSString * s2 =[[NSString alloc] initWithString:@"jack"];

  //  调用了一个方法,一般不用这种方式

3:NSString * s3 = [[NSString alloc] initWithFormat:@"%d",10];

//  它能把字符串拼接起来

4: NSString * s4=[[NSString alloc] initWithUTF8String:"jack"];

//  将c语言字符串转换成oc字符串

5:const char * s5 =  [  s4    UTF8string ];

// 将oc语言字符串转换成c字符串

cocoa把字符串处理封装到NSString类中了,这个类提供了字符串处理的常用方法,详细请见apple develop document

NSString *temp =[[NSString alloc] initWithString:@"test"];

//NSLog(@"%d",[temp retainCount]);

[temp release];

//NSLog(@"%d",[temp retainCount]);

NSMutableString *str=[[NSMutableString alloc] initWithString:temp];

[str appendFormat:@"NSString"];

NSLog(@"%@",str);

NSMutableString  的基本使用

NSMutableString  是可变的字符串,意味着它里面的内容可以被改变。可以添加,或者删除

例如:

NSMutableString * s1 = [NSMutableString   stringWithFormat:@"age is 10"];

// 创建一个可变的字符串,里面的内容是 age is 10;

[s1  appendString:@"11 13"];

// 往s1 这个字符串中添加了 11 13;

//  这个方法没有返回值,直接在s1上添加字符

[s1    deleteCharacterInRange:NSMakeRange(2,3)];

//  删除字符串,locationg 是2 ,length 是3 的、

或者用:

NSRange  range  = [s1     rangeOfString:@“age”];

//  获取age 字符串在整个字符串中的位置

[s1   deleteCharacterInRange:range ];

//  利用字符串的位置来删除字符串。比1 好用

NSString * s2 = [ NSString  stringWithFormat:@"age is 10"];

 //  创建一个NSString类型数据

NSString * s3 = [s2   stringByAppendingString:@"11 13"];

//  这种方法也可以在 age is 10 后面加上 11 13 

//  跟NSMutableString 的本质是完全不同的,他是返回了一个新的字符串s3  age is 10 11 13 , 

//  原来的s2 字符串还是 age is 10 

NSArry 

NSArry 可以分为两类:1:NSArry 

                     2:NSMutableArry 

NSArry 是不可变的数组,NSMutableArry 是可变的数组

NSArry类似于c语言中的数组,可以存放一组数据。但是它是存放Oc对象的数组,只能存放oc数组,不能存放基本数据类型。也不能存放nil。

1:利用c语言数组存放对象

person * p1 = [ [person  alloc  ]  init ];

// 创建一个新的person 对象

person * p2 = [ [person  alloc  ]  init ];

// 在创建一个新的person 对象

person * a[3] = {p1,p2};

//  设置一个数组,里面存放三个person * 类型的数据。

2:利用oc语言数组存放对象

NSObject * person[5] =  {p1,[ [person  alloc  ] init]};

//  设置一个oc数组,里面存放5个oc对象,任何类型都可以。

1中只能存放person * 类型的数据,有局限性,是面向过程的操作

2中可以存放任何类型的数据,是以面向对象来操作数据。

NSArry 是不可变数组,里面的内容永远不能改变。

1>:例如:  NSArry  * a = [NSArry  arry ];

        //  创建一个新的oc数组,里面是空的,没有任何内容

2>: NSArry  * a2 = [NSArry  arryWithObject:@"jack" ];

        //  创建一个新的oc数组,里面有一个元素

3>:NSArry  * a3  = [NSArry  arryWithObjects:@"jack" ,@"rose",nil];

         //  创建一个新的oc数组,里面有2个元素

         // nil 是数组元素结束的标志,会把nil 之前的所有东西当做数组元素。

4>:[a3   count];  

 等价于:a3.count;

// 调用这个count方法可以知道数组里面有几个元素。

2: 访问数组元素

1>: [a3   objectAtIndex:1];

//  意思是访问数组a3里面的第一个元素,就是 “rose”

2>: a3 [ 1];

//  这个是编译器特性,自动帮我们生成1 中的代码,也是访问数组中第一个元素

  可以快速创建一个数组对象

NSArry * a4 = @[ @"jack",@"rose",@"jim"];

//  这个也是编译器特性,自动帮我们生成相应的代码

3:遍历数组

最基本的以前的方法:

person * P1 = [[person  alloc  ]  init];

// 创建一个新的person 对象

NSArry * arry = @[p1,@"jack"];

// 创建一个新的数组里面有两个元素

//  设置一个for循环遍历数组

for (int i = 0; i

{

   NSLog(@"%@",arry[i]);

//  输出数组中的每个元素

 if (i==1 )

 {

break;

}

}

2>: 第二种方式

  for (id obj  in arry )

{// id obj 代表数组里的每个元素

// 每次执行循环体都会把数组里的值,赋给 obj

 NSLog(@"%@",obj);

//  打印数组里的元素

 }

优缺点:这种方法较1 是简单些,可是却不能知道每次打印的是第几个元素。可以进行改进

 int i = 0 ;

  for (id obj  in arry )

{// id obj 代表数组里的每个元素

// 每次执行循环体都会把数组里的值,赋给 obj

 NSLog(@"%@",obj);

//  打印数组里的元素

i++;

NSLog(@"%d",i);

 }

或者用

  for (id obj  in arry )

{// id obj 代表数组里的每个元素

// 每次执行循环体都会把数组里的值,赋给 obj

NSUInteger  i = [arry  indexOfObject:obj ];

//  调用一个方法知道当下的obj在数组是第几个元素

 NSLog(@" %d-%@",i,obj);

//  打印数组里的元素,和它所在的位置。

 }

3:最常用的方法:

[arry  enumerateObjectUsingBlock:^(id obj , NSUInteger  idx, Bool * stop)

             {

       //  调用了block 方法,把一个block 作为一个形参传入进去,并且这个block 接受三个参数

       NSLog(@" %ld-%@",idx,obj);

//  id obj 代表当前元素,idx 代表元素所在位置

//  没拿到一个数组元素就会调用一次block,并且把元素传入block。

}]

其实上述方法内部有个for 循环来判断什么时候停止遍历。内部是用Bool * stop 来设置 遍历的停止或者进行。

当stop 是yes 时,停止,当stop 是 no 时,接着遍历。

你可能感兴趣的:(Foundation框架)