本文共 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、 不能存储nil2)创建方式:
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、NSMutableDictionaryNSMutableDictionary *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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!