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对象获得基本数据类型。

NSNumber *intNumber= [NSNumber numberWithInteger:];
NSNumber *floatNumber = [NSNumber numberWithFloat:
80.00];
int myint = [intNumber intValue];
float myfloat = [floatNumber floatValue];

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

if ([intNumber isEqualToNumber: floatNumber] == YES) {
NSLog(@"相等");
} else {
NSLog(@"不相等");
}
if ([intNumber compare: myNumber] ==
NSOrderedAscending) {
NSLog(@"第一个数小于第二个数");
}

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

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

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

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

  • stringWithString:,类级构造方法创建NSString对象,NSString构造方法还有很多;
  • length,返回Unicode字符的长度;
  • stringByAppendingString:实现了字符串的拼接,这个方法会产生一新的对象
  • isEqualToString:,比较两个字符串是否相等;
  • compare: 比较两个字符串大小;
  • substringToIndex:,可以获得字符串的前x个字符串;
  • substringFromIndex:,可以截取x索引位置到尾部字符串;
  • rangeOfString:, 字符串查找;
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *str1 = @"aBcDeFgHiJk";
NSString *str2 = @"";
NSString *res;
NSComparisonResult compareResult;
NSRange subRange;
//字符个数
NSLog(@"字符串str1长度: %i",[str1 length]);
//拷贝字符串到res
res = [NSString stringWithString: str1];
NSLog(@"拷贝: %@", res);
//拷贝字符串到str1尾部
str2 = [str1 stringByAppendingString: str2];
NSLog(@"连接字符串: %@", str2);
//测试字符串相等
if ([str1 isEqualToString: res] == YES) {
NSLog(@"str1 == res");
} else {
NSLog(@"str1 != res");
}
//测试字符串 < > ==
compareResult = [str1 compare: str2];
if (compareResult == NSOrderedAscending) {
NSLog(@ "str1 < str2");
} else if (compareResult == NSOrderedSame) {
NSLog(@ "str1 == str2");
} else {
NSLog(@ "str1 > str2");
}
res = [str1 uppercaseString];
NSLog(@"大写字符串:%@", res);
res = [str1 lowercaseString];
NSLog(@"小写字符串:%@", res);
NSLog(@"原始字符串: %@", str1);
//获得前三个数
res = [str1 substringToIndex: ];
NSLog(@"字符串str1的前三个字符: %@",res);
res = [str1 substringFromIndex: ];
NSLog(@"截取字符串,从第索引4到尾部: %@",res);
res = [[str1 substringFromIndex: ] substringToIndex: ];
NSLog(@"截取字符串,从第索引3到5: %@",res);
//字符串查找
subRange = [str2 rangeOfString: @""];
if (subRange.location == NSNotFound) {
NSLog(@"字符串没有找到");
} else {
NSLog (@"找到的字符串索引 %i 长度是 %i",
subRange.location, subRange.length);
}
[pool drain];
return ;
}

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

 NSMutableString 类 父类是NSString

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

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

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

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

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

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]
init];
NSString *str1 = @"Objective C";
NSString *search,*replace;
NSMutableString *mstr;
NSRange substr;
//从不可变的字符创建可变字符串对象
mstr = [NSMutableString stringWithString: str1];
NSLog(@" %@", mstr);
//插入字符串
[mstr insertString: @ " Java" atIndex: ];
NSLog(@" %@", mstr);
//具有连接效果的插入字符串
[mstr insertString: @ " and C++"atIndex: [mstr length]];
NSLog(@" %@", mstr);
//字符串连接方法
[mstr appendString: @ " and C"];
NSLog(@" %@", mstr);
//使用NSRange删除字符串
[mstr deleteCharactersInRange:NSMakeRange(, )];
NSLog(@" %@", mstr);
//查找字符串位置
substr = [mstr rangeOfString: @ "string B and"];
if (substr.location != NSNotFound) {
[mstr deleteCharactersInRange: substr];
NSLog(@" %@", mstr);
}
//直接设置可变字符串
[mstr setString: @ "This is string A "];
NSLog(@" %@", mstr);
[mstr replaceCharactersInRange: NSMakeRange(, )
withString: @ "a mutable string "];
NSLog(@" %@", mstr);
//查找和替换
search = @"This is ";
replace = @"An example of ";
substr = [mstr rangeOfString:search];
if (substr.location != NSNotFound) {
[mstr replaceCharactersInRange:substr withString: replace];
NSLog(@" %@", mstr);
}
//查找和替换所有的情况
search = @"a";
replace = @"X";
substr = [mstr rangeOfString: search];
while (substr.location != NSNotFound) {
[mstr replaceCharactersInRange:substr withString: replace];
substr = [mstr rangeOfString: search];
}
NSLog(@" %@", mstr);
[pool drain];
return ;
}

• 我们解释一下主要代码,语句[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: 实例构造方法;
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]
init];
NSArray *weeksNames = [NSArray arrayWithObjects:
@"星期一",@"星期二",@"星期三",@"星期四”
,@"星期五",@"星期六",@"星期日",nil];
NSLog(@"星期名字");
NSLog(@"==== ====");
int i;
for (i=; i < [weeksNames count];i++) {
NSLog(@"%2i %@ ", i+,
[weeksNames objectAtIndex: i]);
}
[pool drain];
return ;
}

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

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

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

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

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

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

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

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:,把对象写入到文件中;
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]
init];
NSMutableDictionary *mutable = [[NSMutableDictionary
alloc] init];
// add objects
[mutable setObject: @"Tom" forKey: @"tom@jones.com"];
[mutable setObject: @"Bob" forKey: @"bob@dole.com" ];
NSLog(@"%@", [mutable description]);
[mutable release];
[pool drain];
return ;
}

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. 1047. Student List for Course (25)

    Zhejiang University has 40000 students and provides 2500 courses. Now given the registered course li ...

  2. css3常用代码整理

    1.圆角 .rd10{-moz-border-radius: 10px;-webkit-border-radius: 10px;border-radius: 10px;-khtml-border-ra ...

  3. bzoj4517: [Sdoi2016]排列计数--数学+拓展欧几里得

    这道题是数学题,由题目可知,m个稳定数的取法是Cnm 然后剩下n-m本书,由于编号为i的书不能放在i位置,因此其方法数应由错排公式决定,即D(n-m) 错排公式:D[i]=(i-1)*(D[i-1]+ ...

  4. 20145337《Java程序设计》第三周学习总结

    20145337 <Java程序设计>第三周学习总结 教材学习内容总结 类与对象 类与对象的关系:要产生对象必须先定义类,类是对象的设计图,对象是类的实例.我觉得在视频中对类与对象关系的描 ...

  5. Python字符串,元组、列表、字典

    1.字符串 <string>.strip() 去掉两边空格及去指定字符 <string>.split() 按指定字符分隔字符串为数组 <string>.isdigi ...

  6. 打开网页自动弹出QQ对话框的实现办法

    Ian今天偶然进入一个公司的企业网站,然后QQ聊天窗口这里马上就弹出与那个公司客服聊天的窗口.怀着好奇的心态,Ian分析了该公司的网站源码,发现了实现网页弹出qq对话框的原理与实现方法,相信此时此刻你 ...

  7. php数字操作,高精度函数,保留计算结果小数位

    $l = 45456.51; $r = 455778.44; $e = '100.00'; $f= '500.00'; $res = bcadd($l, $r,3);//小数点后的位数,精度就是由这个 ...

  8. ios-NSMutableAttributedString 更改文本字符串颜色、大小

    NSString * string = [NSString stringWithFormat:@"您的号码是%@号",[self backString:dic[@"ran ...

  9. web.xml配置error-page

    一. 通过错误码来配置error-page <error-page> <error-code>404</error-code> <location>/e ...

  10. LightOj 1220 - Mysterious Bacteria (分解质因子x=b^p 中的 x 求最大的 p)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1220 题意:已知 x=bp 中的 x 求最大的 p,其中 x b p 都为整数 x = ...