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<arry.count ; 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 时,接着遍历。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容