Objective-C语言Foundation框架
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框架的更多相关文章
- OC语言-07-OC语言-Foundation框架
结构体 NSRange/CGRange 用来表示一个元素在另一个元素中的范围,NSRange等价于CGRange 包含两个属性: NSUInteger location:表示一个元素在另一个元素中的位 ...
- 黑马程序员——OC语言Foundation框架 结构体
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)结构体 NSRange(location length) NSPoi ...
- 黑马程序员——OC语言Foundation框架 (2) NSArray NSSet NSDictionary\NSMutableDictionary
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)NSArray 1>NSArray :不可变数组 ①创建方法 ...
- 黑马程序员——OC语言Foundation框架 NSArray NSSet NSDictionary\NSMutableDictionary
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一) NSNumber 将各种基本数据类型包装成NSNumber对象 @ ...
- OC - 7.Foundation框架的简单介绍
OC语言-07-OC语言-Foundation框架 结构体 NSRange/CGRange 用来表示一个元素在另一个元素中的范围,NSRange等价于CGRange 包含两个属性: NSUInte ...
- IOS开发-OC学习-Foundation框架练习
OC语言Foundation框架中字典.字符串.数组的应用: NSString *string = @"China|Usa|France"; NSArray *array = [s ...
- Objective - c Foundation 框架详解2
Objective - c Foundation 框架详解2 Collection Agency Cocoa provides a number of collection classes such ...
- oc语言的Foundation框架(学习笔记1)
Foundation框架 1.Foundation框架介绍 框架是由许多类.方法.函数以及文档按照一定的规则组合的起来的集合. cocoa程序编写主要用到2个框架Foundation和Applicat ...
- Objective-C( Foundation框架 一 常见的结构体)
常见的结构体 (NSPoint,CGPoint).(NSRange,CGRange).(NSSize,CGSize) 苹果官方推荐使用CG开头的结构体 NSRange是Foundation框架中常见的 ...
随机推荐
- js从身份证号中获取出生日期和性别
今天,在做移动端的项目中,按照设计稿的要求,是可以让用户自己输入出生日期的,我还很认真的用了刚刚知道的html5表单的日期类型,本想着终于不用日期插件就可以实现用户选择自己的出生日期了,可结果老大说, ...
- Linux下配置Lamp
linux下配置lamp步骤: 一.快速安装Apache+PHP5+MySql 先更新: # yum update 然后安装LAMP环境:(163的yum源上只有php5.1.6 mysql 5.0. ...
- c#面向对象基础 静态成员、构造函数、命名空间与类库
静态成员 属性.方法和字段等成员是对象实例所特有的,即改变一个对象实例的这些成员不影响其他的实例中的这些成员.除此之外,还有一种静态成员(也称为共享成员),例如静态方法.静态属性或静态字段.静态成员可 ...
- HTML静态网页 css样式表
CSS(Cascading Style Sheet,叠层样式表),作用是美化HTML网页. /*注释区域*/ 此为注释语法 一.样式表 (一)样式表的分类 1.内联样式表 和HTML联合显示,控 ...
- 演示一个VPD进行数据访问控制的示例
1.确认数据库版本 2.环境准备 创建一张顾客表(customer),其中包括了顾客姓名,年龄,姓名,地址,收入等, 我们需要使用LIVAN用户只能查看收入为2000元以下的顾客信息. 3.实验控制策 ...
- MyEclipse安装lombok
1. 将lombok.jar复制到myeclipse.ini所在的文件夹 2. 打开myeclipse.ini,插入以下两行: -Xbootclasspath/a:lombok.jar-javaage ...
- BizTalk开发系列(十三) Schema设计之值约束
XML Schema 的作用是定义 XML 文档的合法构建模块.在开发过程中有时需要对XML文档做精确的约束.以保证XMl数据的准确性. 今天我们以一个班级Sample来讲探讨一下如何在开发BizTa ...
- Java Web(转)
struts2+spring+hibernate 上传文件 关 键字: s2sh 上传文件 struts2 spring hibernate 前段时间,我用struts2.1.6.spring2.5. ...
- EmguCV+Win7+Visual C# 2012 配置
一.下载与安装OpenCV 安装包版本:OpenCV2.4.2 X86 下载地址:http://sourceforge.net/projects/opencvlibrary/files/opencv- ...
- DevExpress GridView对表格的部分说明
1. int[] selects = this.m_grdView1.GetSelectedRows(); // 获取选中的行,可能是几行 2. this.m_grdView1.GetRowCellV ...