Mac OS X开发会使用Cocoa框架,它是一种支持应用程序提供丰富用户体验的框架,它实际上由:Foundation和Application Kit(AppKit)框架组成。iOS开发,会使用Cocoa Touch框架,它实际上由:Foundation和UIKit框架组成。

• AppKit和UIKit框架都是与窗口、按钮、列表等相关的类。Foundation是Mac OS X和iOS应用程序开发的基础框架,它包括了一些基本的类,如:数字、字符串、数组、字典等。

• 基本数据类型,int、char、float和double都不是类,不具有方法、成员变量和属性,以及面向对象的特征。为了实现“一切都是对象”的承诺,因此在Foundation框架中使用NSNumber类来封装这些数字类型。这样数字就具有了面向对象的基本特征了。

采用+ numberWithInt:等“+ number”开头的类级构造方法,可以从基本数据类型构建NSNumber对象。而使用–intValue方法可以从NSNumber对象获得基本数据类型。

  1. NSNumber *intNumber= [NSNumber numberWithInteger:];
  2. NSNumber *floatNumber = [NSNumber numberWithFloat:
  3. 80.00];
  4. int myint = [intNumber intValue];
  5. float myfloat = [floatNumber floatValue];

可以转化成为基本数据类型比较,当然可以使用NSNumber的方法比较,这就是对象的优势了,与比较相关方法有:isEqualToNumber:和compare:。isEqualToNumber:只是比较是否相对,compare:可以比较大小。

  1. if ([intNumber isEqualToNumber: floatNumber] == YES) {
  2. NSLog(@"相等");
  3. } else {
  4. NSLog(@"不相等");
  5. }
  6. if ([intNumber compare: myNumber] ==
  7. NSOrderedAscending) {
  8. NSLog(@"第一个数小于第二个数");
  9. }

NSOrderedAscending是枚举类型NSComparisonResult的其中成员,代表第一个数小于第二个数;

NSOrderedSame成员代表第一个数等于第二个数;

NSOrderedDescending成员代表第一个数大于第二个数。

在Foundation框架中字符串类有两种:NSString不可变字符串类和NSMutableString可变字符串类NSString是定义固定大小的字符串,不可变字符串做追加、删除、修改、插入和拼接等操作会产生新的对象NSMutableString是可对字符串做追加、删除、修改、插入和拼接等操作而不会产生新的对象

  • stringWithString:,类级构造方法创建NSString对象,NSString构造方法还有很多;
  • length,返回Unicode字符的长度;
  • stringByAppendingString:实现了字符串的拼接,这个方法会产生一新的对象
  • isEqualToString:,比较两个字符串是否相等;
  • compare: 比较两个字符串大小;
  • substringToIndex:,可以获得字符串的前x个字符串;
  • substringFromIndex:,可以截取x索引位置到尾部字符串;
  • rangeOfString:, 字符串查找;
  1. #import <Foundation/Foundation.h>
  2. int main (int argc, const char * argv[]) {
  3. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  4. NSString *str1 = @"aBcDeFgHiJk";
  5. NSString *str2 = @"";
  6. NSString *res;
  7. NSComparisonResult compareResult;
  8. NSRange subRange;
  9. //字符个数
  10. NSLog(@"字符串str1长度: %i",[str1 length]);
  11. //拷贝字符串到res
  12. res = [NSString stringWithString: str1];
  13. NSLog(@"拷贝: %@", res);
  14. //拷贝字符串到str1尾部
  15. str2 = [str1 stringByAppendingString: str2];
  16. NSLog(@"连接字符串: %@", str2);
  17. //测试字符串相等
  18. if ([str1 isEqualToString: res] == YES) {
  19. NSLog(@"str1 == res");
  20. } else {
  21. NSLog(@"str1 != res");
  22. }
  23. //测试字符串 < > ==
  24. compareResult = [str1 compare: str2];
  25. if (compareResult == NSOrderedAscending) {
  26. NSLog(@ "str1 < str2");
  27. } else if (compareResult == NSOrderedSame) {
  28. NSLog(@ "str1 == str2");
  29. } else {
  30. NSLog(@ "str1 > str2");
  31. }
  32. res = [str1 uppercaseString];
  33. NSLog(@"大写字符串:%@", res);
  34. res = [str1 lowercaseString];
  35. NSLog(@"小写字符串:%@", res);
  36. NSLog(@"原始字符串: %@", str1);
  37. //获得前三个数
  38. res = [str1 substringToIndex: ];
  39. NSLog(@"字符串str1的前三个字符: %@",res);
  40. res = [str1 substringFromIndex: ];
  41. NSLog(@"截取字符串,从第索引4到尾部: %@",res);
  42. res = [[str1 substringFromIndex: ] substringToIndex: ];
  43. NSLog(@"截取字符串,从第索引3到5: %@",res);
  44. //字符串查找
  45. subRange = [str2 rangeOfString: @""];
  46. if (subRange.location == NSNotFound) {
  47. NSLog(@"字符串没有找到");
  48. } else {
  49. NSLog (@"找到的字符串索引 %i 长度是 %i",
  50. subRange.location, subRange.length);
  51. }
  52. [pool drain];
  53. return ;
  54. }

• 我们解释一下主要代码,str2 = [str1stringByAppendingString: str2]语句是将两个字符串对象拼接在一起,由于NSString是不可变字符串类,这会产生一个新的对象。subRange = [str2 rangeOfString: @"34"]中的rangeOfString:方法会返回一个NSRange结构体,它的location成员是找到的字符串的索引,它的length成员是找到的字符串的长度。

 NSMutableString 类 父类是NSString

• stringWithString:,类级构造方法创建NSString对象,NSMutableString构造方法还有很多;

• insertString:,插入字符串,不会创建新的对象;

• appendString:,追加字符串,不会创建新的对象;

• deleteCharactersInRange:在一个范围内删除字符串,不会创建新的对象;

• replaceCharactersInRange: withString:替换字符串,不会创建新的对象;

  1. #import <Foundation/Foundation.h>
  2. int main (int argc, const char * argv[]) {
  3. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]
  4. init];
  5. NSString *str1 = @"Objective C";
  6. NSString *search,*replace;
  7. NSMutableString *mstr;
  8. NSRange substr;
  9. //从不可变的字符创建可变字符串对象
  10. mstr = [NSMutableString stringWithString: str1];
  11. NSLog(@" %@", mstr);
  12. //插入字符串
  13. [mstr insertString: @ " Java" atIndex: ];
  14. NSLog(@" %@", mstr);
  15. //具有连接效果的插入字符串
  16. [mstr insertString: @ " and C++"atIndex: [mstr length]];
  17. NSLog(@" %@", mstr);
  18. //字符串连接方法
  19. [mstr appendString: @ " and C"];
  20. NSLog(@" %@", mstr);
  21. //使用NSRange删除字符串
  22. [mstr deleteCharactersInRange:NSMakeRange(, )];
  23. NSLog(@" %@", mstr);
  24. //查找字符串位置
  25. substr = [mstr rangeOfString: @ "string B and"];
  26. if (substr.location != NSNotFound) {
  27. [mstr deleteCharactersInRange: substr];
  28. NSLog(@" %@", mstr);
  29. }
  30. //直接设置可变字符串
  31. [mstr setString: @ "This is string A "];
  32. NSLog(@" %@", mstr);
  33. [mstr replaceCharactersInRange: NSMakeRange(, )
  34. withString: @ "a mutable string "];
  35. NSLog(@" %@", mstr);
  36. //查找和替换
  37. search = @"This is ";
  38. replace = @"An example of ";
  39. substr = [mstr rangeOfString:search];
  40. if (substr.location != NSNotFound) {
  41. [mstr replaceCharactersInRange:substr withString: replace];
  42. NSLog(@" %@", mstr);
  43. }
  44. //查找和替换所有的情况
  45. search = @"a";
  46. replace = @"X";
  47. substr = [mstr rangeOfString: search];
  48. while (substr.location != NSNotFound) {
  49. [mstr replaceCharactersInRange:substr withString: replace];
  50. substr = [mstr rangeOfString: search];
  51. }
  52. NSLog(@" %@", mstr);
  53. [pool drain];
  54. return ;
  55. }

• 我们解释一下主要代码,语句[mstrdeleteCharactersInRange:NSMakeRange(16, 13)]是删除指定范围的字符串,函数NSMakeRange 是创建NSRange结构体,其中第一个参数是位置,第二个参数是长度,语句[mstrreplaceCharactersInRange: NSMakeRange(8, 8)withString:@ “a mutable string ”]替换指定访问的字符串。[mstrdeleteCharactersInRange: substr]语句是删除指定范围的字符串。

在Foundation框架中数组被封装成为类,数组有两种:NSArray不可变数组类和NSMutableArray可变数组类。

NSArray有很多方法,下面是总结常用的方法:

  • count,返回当前数组的长度;
  • objectAtIndex:,按照索引返回数组中的元素;
  • containsObject:是否包含某一元素;
  • arrayWithObjects: 类级构造方法;
  • initWithObjects: 实例构造方法;
  1. #import <Foundation/Foundation.h>
  2. int main (int argc, const char * argv[]) {
  3. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]
  4. init];
  5. NSArray *weeksNames = [NSArray arrayWithObjects:
  6. @"星期一",@"星期二",@"星期三",@"星期四”
  7. ,@"星期五",@"星期六",@"星期日",nil];
  8. NSLog(@"星期名字");
  9. NSLog(@"==== ====");
  10. int i;
  11. for (i=; i < [weeksNames count];i++) {
  12. NSLog(@"%2i %@ ", i+,
  13. [weeksNames objectAtIndex: i]);
  14. }
  15. [pool drain];
  16. return ;
  17. }

arrayWithObjects可以用来创建使用一列对象作为元素的数组。在这种情况下,按顺序列出对象并使用逗号隔开。使用这个方法必须在列表的最后指定一个结束标志nil。count可以获得数组的长度。数组的下标是从0开始的。

NSMutableArray是NSArray的子类,NSMutableArray有很多方法,下面是总结常用的方法:

  • addObject:,在数组的尾部追加一个元素;
  • insertObject:,在数组的添加一个元素;
  • atIndex:按照索引插入一个元素;
  • removeObjectAtIndex:移除特定索引的元素;
  • removeObject: 移除特定元素;
  • initWithCapacity: 实例构造方法;
  1. #import <Foundation/Foundation.h>
  2. int main (int argc, const char * argv[]) {
  3. NSMutableArray *weeksNames = [[NSMutableArray alloc]
  4. initWithCapacity: ];
  5. [weeksNames addObject: @"星期一"];
  6. [weeksNames addObject: @"星期二"];
  7. [weeksNames addObject: @"星期三"];
  8. [weeksNames addObject: @"星期四"];
  9. [weeksNames addObject: @"星期五"];
  10. [weeksNames addObject: @"星期六"];
  11. [weeksNames addObject: @"星期日"];
  12. NSLog(@"星期名字");
  13. NSLog(@"==== ====");
  14. int i;
  15. for (i=; i < [weeksNames count];i++)
  16. NSLog(@"%2i %@ ", i+,
  17. [weeksNames objectAtIndex: i]);
  18. [weeksNames release];
  19. return ;
  20. }

[[NSMutableArray alloc] initWithCapacity: 3],可以初始化可变数组并分配3个初始单元,如果超过了容量会自动追加的。addObject方法可以向数组中添加元素。

字典集合,它是由“键-值”对构成的集合。键集合不能重复,值集合没有特殊要求。键和值集合中的元素可以是任何对象,但是不能是nil。字典类数据结构模型,如图所示的“学生与学号”集合,与数组类一样,字典类也分为NSDictionary不可变字典和NSMutableDictionary可变字典

NSDictionary有很多方法,下面是总结常用的方法:

  • count,字典集合的长度;
  • objectForKey:,通过键获得值对象;
  • allKeys,返回所有键集合;
  • arrayWithObjects:类级构造方法;
  • initWithObjects: 实例构造方法;
  • initWithObjects:forKeys:,实例构造方法;
  • initWithObjectsAndKeys:,实例构造方法;
  • initWithContentsOfFile:,从属性文件中创建对象;
  1. #import <Foundation/Foundation.h>
  2. int main (int argc, const char * argv[]) {
  3. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]
  4. init];
  5. NSArray * keys = [@"one two three four five"
  6. componentsSeparatedByString:@" "];
  7. NSArray * values = [@"alpha bravo charlie delta echo"
  8. componentsSeparatedByString:@" "];
  9. NSDictionary * dict = [[NSDictionary alloc]
  10. initWithObjects:values forKeys:keys];
  11. NSLog(@"%@", [dict description]);
  12. [dict release];
  13. [pool drain];
  14. return ;
  15. }

NSArray * keys = [@“one two three four five”componentsSeparatedByString:@“ ”]语句是将一个字符串按照空格分割返回NSArray对象,同理获得values对象,然后使用NSDictionary * dict = [[NSDictionary alloc]initWithObjects:values forKeys:keys]语句把keys和values放入到不可变字典对象dict中。

NSMutableDictionary 是NSDictionary的子类,NSMutableDictionary有很多方法,下面是总结常用的方法:

  • setObject: forKey:,通过键和值;
  • removeObjectForKey:,按照键移除值;
  • writeToFile: atomically:,把对象写入到文件中;
  1. #import <Foundation/Foundation.h>
  2. int main (int argc, const char * argv[]) {
  3. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]
  4. init];
  5. NSMutableDictionary *mutable = [[NSMutableDictionary
  6. alloc] init];
  7. // add objects
  8. [mutable setObject: @"Tom" forKey: @"tom@jones.com"];
  9. [mutable setObject: @"Bob" forKey: @"bob@dole.com" ];
  10. NSLog(@"%@", [mutable description]);
  11. [mutable release];
  12. [pool drain];
  13. return ;
  14. }

NSMutableDictionary *mutable = [[NSMutableDictionaryalloc] init]是采用默认的init构造方法创建NSMutableDictionary对象mutable。[mutable setObject:@"Tom" forKey: @"tom@jones.com"]语句是按照键tom@jones.com添加Tom对象。

Objective-C语言Foundation框架的更多相关文章

  1. OC语言-07-OC语言-Foundation框架

    结构体 NSRange/CGRange 用来表示一个元素在另一个元素中的范围,NSRange等价于CGRange 包含两个属性: NSUInteger location:表示一个元素在另一个元素中的位 ...

  2. 黑马程序员——OC语言Foundation框架 结构体

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)结构体 NSRange(location length) NSPoi ...

  3. 黑马程序员——OC语言Foundation框架 (2) NSArray NSSet NSDictionary\NSMutableDictionary

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)NSArray 1>NSArray :不可变数组 ①创建方法 ...

  4. 黑马程序员——OC语言Foundation框架 NSArray NSSet NSDictionary\NSMutableDictionary

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一) NSNumber 将各种基本数据类型包装成NSNumber对象 @ ...

  5. OC - 7.Foundation框架的简单介绍

    OC语言-07-OC语言-Foundation框架   结构体 NSRange/CGRange 用来表示一个元素在另一个元素中的范围,NSRange等价于CGRange 包含两个属性: NSUInte ...

  6. IOS开发-OC学习-Foundation框架练习

    OC语言Foundation框架中字典.字符串.数组的应用: NSString *string = @"China|Usa|France"; NSArray *array = [s ...

  7. Objective - c Foundation 框架详解2

    Objective - c  Foundation 框架详解2 Collection Agency Cocoa provides a number of collection classes such ...

  8. oc语言的Foundation框架(学习笔记1)

    Foundation框架 1.Foundation框架介绍 框架是由许多类.方法.函数以及文档按照一定的规则组合的起来的集合. cocoa程序编写主要用到2个框架Foundation和Applicat ...

  9. Objective-C( Foundation框架 一 常见的结构体)

    常见的结构体 (NSPoint,CGPoint).(NSRange,CGRange).(NSSize,CGSize) 苹果官方推荐使用CG开头的结构体 NSRange是Foundation框架中常见的 ...

随机推荐

  1. 【hihoCoder】1049.后序遍历

    问题:http://hihocoder.com/problemset/problem/1049?sid=767510 已知一棵二叉树的前序遍历及中序遍历结果,求后序遍历结果 思路: 前序:根-左子树- ...

  2. Qweb Pdf 中添加 图片

    具体方法如下: <img t-if="company.logo" t-att-src="'data:image/png;base64,%s' % company.l ...

  3. linux文件描述符数量的坑

    ulimit -n  查看 单进程或线程,可打开的最大文件描述符数 通过ulimit -n 10240 设置文件描述符数: (当前shell生效,这真是个坑啊) 永久生效:(需要重启系统,也是个坑,好 ...

  4. HDU2045/*HDU2604/*HDU2501/HDU2190 递推

    不容易系列之(3)-- LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  5. HTML 几种特别分割线特效

    一.基本线条 二.特效(效果并不是孤立的,可相互组合)1.两头渐变透明:<HR style="FILTER: alpha(opacity=100,finishopacity=0,sty ...

  6. java程序实现删除本地文件

    import java.io.File; public class Test { public static void main(String args[]) {    Test t = new Te ...

  7. WordPress模板常用函数

    基本条件判断Tag is_home() : 是否为主页 is_single() : 是否为内容页(Post) is_page() : 是否为内容页(Page) is_category() : 是否为C ...

  8. VC++6.0编译器标记的那些内存值

    栈内存初始值 0xcccccccc 和-858993460.   二者是一样的, 一个是16进制, 另一个是10进制

  9. Android课程---Activity的跳转与传值(转自网上)

    Activity跳转与传值,主要是通过Intent类来连接多个Activity,以及传递数据.   Intent是Android一个很重要的类.Intent直译是“意图”,什么是意图呢?比如你想从这个 ...

  10. Java程序设计 实验三

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计   班级:1353       姓名:李海空  学号:20135329 成绩:             指 ...