《Objective-C基础教程》第8章 Foundation Kit 介绍
发布日期:2022-02-01 13:46:23 浏览次数:30 分类:技术文章

本文共 4881 字,大约阅读时间需要 16 分钟。

8.1 稳固的Foundation

1、Foundation是两类UI框架的基础,因为它不含UI对象,所以它的对象可以在iOS或OS X应用程序中兼容

2、Foudation框架中有许多有用的、面向数据的简单类和数据类型(如NSString、NSArray、NSEnumerator和NSNumber等)
3、Foundation是以另一个框架CoreFoundation(用纯C语言写的,函数或变量以CF开头)为基础创建的

8.2 使用项目样本代码

@autorreleasepool

8.3 一些有用的数据类型

Cocoa的一些结构体(struct)

8.3.1 范围:NSRange
8.3.2 几何数据类型

用来处理几何图形的数据类型,这些类型由Core Graphics框架提供,名称都带有CG前缀,如(CGPoint和CGSize)

8.4 字符串

8.4.1 创建字符串

1

NSString *height=@”175mm”;
2
+(id)stringithFormat:(NSString *)format,…;//…告诉编译器这个方法可以接受多个以逗号隔开的其他参数,+表示把这个方法定义为类方法(class method)
NSString *height=[NSString stringWithFormat:@”your height is %d”,175];

8.4.2 类方法

1、方法(前缀+),术语类对象。通常用于创建新的实例或者访问一些全局类数据

2、实例方法(前缀-),将会在指定的对象实例中起作用

8.4.3 关于大小

-NSUInter length;

NSUInter length=[height length];//实例方法length返回字符串中的字符个数

8.4.4 字符串比较

1

-(BOOL)isEqualToString:(NSString *)aString;

if([thing1 isEqualToString:thing2]){

NSLog(@”YES”);
}
2
-(NSComparisonResult)compare:(NSString *)aString;
返回NSOrderedAscending,左边的数值小于右边的,即比较的目标在字母表的位置更靠前,返回NSOrderedAscending,则靠后,返回NSOrderedSame,则相同。

8.4.5 不区分大小写的比较

使用option

-(NSComparisonResult)compare:(NSString *)aString option:(NSStringCompareOptions)mask;

options参数是一个掩位码,使用|来添加选项标记

if([thing1 compare:thing2 options:NSCaseInsensitiveSearch|NSNumericSearch]==NSOrderedSame){
NSLog(@”YES”);
}
NSCaseInsensitiveSearch:不区分大小写
NSNumericSearch:比较字符串的字符个数,而不是字符串值
NSLiteralSearch:完全比较,区分大小写

8.4.6 字符串内是否孩包含别的字符串

-(BOOL)hasPrefix:(NSString *)aString;//检查字符串是否以另一个字符串开头

-(BOOL)hasSuffix:(NSString *)aString;//检查是否以另一个字符串结尾
-(NSRange)rangeOfString:(NSString *)aString;//检查字符串中是否包含其他字符串
if([filename hasSufffix:@”.txt”]){
NSLog(@”This is a .txt”);
}

NSRange range=[filename rangeOfString:@”txt”];//返回NSRange结构体,包括location和length

8.4.7可变性

NSString是不可变的,一旦创建,无法通过删除或者添加字符的形式来改变它.

NSMutableString可变字符串
1、创建一个NSMutableString
+(id)NSMutableString:(NSUInter *)capacity;// 声明
NSMutableString *string=[NSMutableString stringWithCapacity:42];// 创建一个新的可变字符串
[string appendString:@”hello”];//添加字符串
[string appendFormat:@”hello,%@”,sds];//添加字符串
//删除字符串中的字符
NSRange sdsRange=[string rangeOfString:@”sds”];
sdsRange.length–;//删除sds前的逗号
[string deleteCharactersInRange:sds];
2、两个特性
NSMutableString是NSString的子类,因此获得了两个特性
1、 任何使用NSString的地方,都可以使用NSMutableString代替
2、 与实例方法一样,继承对类方法也同样适用,NSMutableString也可以使用NSString的方法(如,stringWithFormat)

8.5 集合大家族

8.5.1 NSArray:Cocoa类,用来存储对象的有序列表

1)NSArray的两个限制:

1、 只能存储Objective-C的对象,不能存储院士的C语言基础数据类型(如int、flaot以及NSArray中的随机指针等)
2、 不能存储nil

2)创建方式:

1、通过类方法arrayWithObjects:创建NSArray
NSArray *array=[NSArray arrayWithObjects:@”one”,@”two”,nil];//对象列表以逗号分割,以nil结尾
2、使用数组字面量格式
NSArray *array=@[@”one”,@”two”];

3)获取数组包含对象个数:[array count];

4)获取特定索引处的对象:[array objectAtIndex:i]或者array[i]

5)设置断点,使程序遇到异常时抛出。(左侧工作栏第七个按钮,点+号添加)

6)将字符串切分成数组

NSString *string=@”s,d,s”;
NSArray *array=[string componentsSeparatedByString @”,”];//分割
string=[array componentsJoinedBYString:@”;”];//合并

8.5.2 可变数组(NSMutableArray)

NSMutableArray *array=[NSMutableArray arrayWithCapacity:42];// 创建一个新的可变数组

[array addObject:Object];//添加对象
[array removeObjectAtIndex:0];//删除索引处的对象

8.5.3 枚举
NSEnumerator *enumerator=[array objectEnumerator];//通过 objectEnumerator方法向array请求枚举器while(id thingie=[enumerator nextObject])//使用nextObject方法,每次循环都想这个枚举器请求下一个对象,直到nil{    NSLog(@”I found %@”,thingie);}

注意:对可变数组进行枚举操作时,如果通过添加或者删除对象来改变数组容量,枚举器会出现混乱,会获得undefined result。

8.5.4 快速枚举(推荐使用)
for(NSString *string in array){    NSLog(@”I found %@”,string);}
8.5.5 NSDictionary

1、创建

Tire *t1=[Tire new];Tire *t2=[Tire new];NSDictionary *tires=[NSDictionary dictionaryWithObjecAndKeys:t1,@”front”,t2,@”back”];

也可以使用

NSDictionary *tires=@{@”fornt”:t1,@”back”:t2};

2、查找

Tire *tire=[tires objecForKey:@”front”];
或者
Tire *tire=tires[@”front”];
3、NSMutableDictionary

NSMutableDictionary *dictionary =[NSMutableDictionary stringWithCapacity:42];// 创建一个新的

可变字典并告诉该字典建议的最终大小

或者直接向NSMutableDictionary发送dictionary消息,创建新的字典

NSMutableDictionary *dictionary =[NSMutableDictionary dictionary];[dictionary setObject:t1 forKey:@”front”];//添加元素[array removeObjectForKey:@”front”];//删除对象

注意:与NSArray一样,没有适用于NSMutableDictionary的字面量初始化语法

8.5.6 请不要乱来

不要轻易创建NSString、NSArray或NSDirctionary的子类(12章中具体介绍)。

8.6 其他数值

NSArray和NSDirctionary只能存储对象,不能直接存储基本类型数据。但可以先用对象来封装基本数值

8.6.1 NSNumber(封装基本数据类型)

NSNumber *number=@1;//整数型

NSNumber *number=@”1”;//字符型
使用实例方法重新获得原有数据:
[number intValue];

8.6.2 NSValue(NSNumber的超类,可以封装任意值)

传递的参数时想要封装的数值的地址

将NSRect放入NSArray中

NSRect rect=NSMakeRect(1,2,3);NSValue *value=[NSValue valueWithBytes:&rect objCType:@encode(NSRect)];[array addObject:value];

可以使用方法getValue:来提取数值(需要传递存储这个数值的变量地址):

value=[array objectAtIndex:0];[value getValue:&rect];//方法名中使用了get,表明我们提供的是一个指针

8.6.3 NSNull

不能再集合中放入nil,nil在NSArray和NSDictionary中由特殊的含义

使用NSNull 可以表示“这里什么都没有”,它只有一个方法
[NSNull null]

8.8 小结

1)三个语言特性

1、类方法,由类本身而不是某个示例来处理的方法
2、@encode()指令,用于需要描述C语言基础类型的方法;
3、快速枚举
2)Cocoa类
1、NSString存储字符串
2、NSArray和NSDictionary存储对象的集合(一旦创建不能更改)
3、NSMutableArray和NSMutableDictionary(可更改)

转载地址:https://blog.csdn.net/shidesheng5435/article/details/47609797 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:《Objective-C基础教程》第7章 深入了解Xcode
下一篇:《Objective-C基础教程》第9章 内存管理(未完)

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年05月05日 01时16分20秒