本学习笔记是对《Objective—C 程序设计 第六版》第十五章关于Foundation框架内容的查缺补漏,因此内容看上去不是很完整。
8.1~8.2 略
8.3 一些有用的数据类型
8.31 范围结构体
NSRange:表示字符串里的字符范围或者数组里的元素范围。
typedef struct _NSRange
{
unsigned int location;
unsigned int length;
}NSRange;
- location字段存放该范围的起始位置
- length字段存放该范围内所含元素的个数
8.32 几何数据类型
- CGPoint:表示笛卡尔平面中的一个坐标(x,y)
struct CGPoint
{
float x;
float y;
};
CGSize:存储长度和宽度
struct CGSize
{
float width;
float height;
}
CGRect:矩形数据类型
struct CGRect
{
CGPoint origin;
CGSize size;
}
8.4 字符串
8.41 创建字符串
NSString *height;
height = [NSString stringWithFormat:@"Your heihgt is %d feet, %d inches",5,7];
8.42 类方法
- 工厂方法(factory method):创建新对象的类方法
8.43 关于大小
- 返回字符串中字符个数:
NSUInteger length = [height length];
8.44 字符串比较
[str1 isEquatlToString: str2];//str1,str2皆为字符串对象
if ( str1 == str2 ) //只判断str1和str2的指针数值
if ([str1 isEqualToString: str2])//判断字符串内容是否相等
8.45 不区分大小写的比较
- compare:optioins:
- NSCaseInsensitiveSearch:不区分大小写字符
- NSLiteralSearch:完全比较,区分大小写字符
- NSNumericSearcch:比较字符串的字符个数
if([str1 compare: str2 options: NSCaseInsensitiveSearch|NSNumericSearcch] == NSOrderedSame)
8.46 字符串是否包含别的字符
- (BOOL) hasPrefix:(NSString *) aString;//是否有前缀
- (BOOL) hassuffix:(NSString *) aString;//是否有后缀
- (NSRange) rangeOfString:(NSString *) aString;//返回包含location和length的结构体
8.47 可变性
- NSString是不可变的:一旦被创建,便不能被改变,对它操作后,会生成新的字符串。
- 可改变字符串:NSMutableString,是NSString的子类。
- 任何使用NSString的地方,NSMutableString都可以来替代。
- stringWithFormat:也可以用来创建NSMutableString对象。
NSMutableString *string = [NSMutableString stringWithCapaciry:50];
[string appendString:@"Hello there "];
[string appendFormat:@"person %d", 25];
8.5 集合大家族
8.51 NSArray
- NSArray 可以放入任意类型的对象
- 只能存储Objective-C对象;不能存储nil
NSArray *array = [NSArrayWithObjects:@"one",@"two",@"three",nil];
NSArray *array2 = @[@"one",@"two",@"three"];
//包含对象的个数
-(NSUInteger)count; //[array count]
//访问元素
-(id)objectAtIndex:(NSUInteger)Index;//[array objectAtIndex:3]
//array[i]
8.52 可变数组
- 不能添加任何元素也不能删除任何元素,(数组中包含的对象是可以改变的)
创建可变数组:
NSMutableArray *array = [NSMutableArray arrayWithCapacity:15];
[array addObject: anyObject];
[array removeObjectAtIndex:2];
- 注意:没有用来创建可变数组对象的字面量语法
8.53 枚举
- 向数组请求枚举器
NSEnumerator *enumerator = [array objectEnumerator];
while (id thigie = [enumerator nextObject])
{
NSLog(@"I found %@", thingie);
}
注意:对可变数组进行枚举操作时,不能通过添加或删除对象这类方式来改变数组的容量。
8.54 快速枚举
- 快速枚举
for (NSString *string in array)
{
NSLog(@"I found %@",string); //用变量存储每个数值
}
- 代码块方法
[array enumerateObjectsUsingBlock:^(NSString *string, NSUInteger index, BOOL *stop){
NSLog(@I found %@, string);
}]
8.55 NSDictionary
- 字典使用的是键查询的优化方式,可以立即找出要查询的数据。
- 创建新的NSDictionary的时候,就要提供该字典所存储的全部对象和关键字。
8.6 其他数值
8.61 NSNumber
- NSNumber 类来封装基本数据类型
- 装箱(boxing):将基本类型数据封装成对象的过程
- 开箱(unboxing):从对象中提取基本类型的数据
8.62 NSValue
- NSNumber是NSValue的子类,NSValue可以封装任意值