面试考点
// 不可变字符串也能添加新的字符,只不过它已经产生了一个新的字符串对象,跟原来的那个已经没有关系了
//可变字符串 NSMutableString
//可变和不可变的区别
//可变的操作的是始终是同一块内存,不可变操作的不是同一块内存,他会产生不同内存
可变字符串是不可变字符串的子类,同时它扩充了自己的新的方法
字符串:
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
//字符串
NSString *str1 = [[NSString alloc]initWithString:@"ios"];
NSLog(@"str1 = %@",str1);
// [str1 release];
int a = 10;
NSString *str2 = [[NSString alloc]initWithFormat:@"%d",a];
NSLog(@"str2 len = %d",str2.length);//字符串长度
NSLog(@"str2 = %@",str2);
// [str2 release];
//字符串拼接
// NSString *str3 = [str1 stringByAppendingString:str2];
NSString *str3 = [str1 stringByAppendingFormat:@"%d",7];
NSLog(@"str3 = %@",str3);
NSString *str4 = @"123456789";
NSString *str5 = [str4 substringFromIndex:0];
NSLog(@"str5 = %@",str5);
NSString *str6 = [str4 substringToIndex:4];
NSLog(@"str6 = %@",str6);
NSRange r1 = {2,3};
NSString *str7 = [str4 substringWithRange:r1];
NSLog(@"str7 = %@",str7);
//查找字符串
NSRange r2 = [str4 rangeOfString:@"145"];
if (r2.location == NSNotFound)
{
NSLog(@"Not Found!");
}
//+stringWithContentOfFile:encoding:error;
// -initWithContentsOfFile:encoding:error;
//utf-8编码
//字符串的转换函数
NSString *str8 = @"123.45";
double d = [str8 doubleValue];
NSLog(@"%lf",d);
//比较字符串
NSString *str9 = @"123";
NSString *str10 =@"456";
if ([str9 isEqualToString:str10])
{
NSLog(@"相等");
}
NSComparisonResult r = [str9 compare:str10];//NSComparisonResult 是枚举类型的
NSLog(@"r = %d",r);//输出-1 表示升序
//判断对象是否相等
if ([str9 isEqual:str10])
{
NSLog(@"相等");
}
else
{
NSLog(@"不相等");
}
//大小写转换 应用 验证码 lowercaseString uppercaseString
//可变字符串 NSMutableString
//可变和不可变的区别
//可变的操作的是同一块内存,不可变操作的不是同一块内存,他会产生不同内存
NSMutableString *str11 = [[NSMutableString alloc]initWithCapacity:10];
[str11 appendString:@"ios"];//appendingString appendingFormat, 追加字符串
[str11 appendFormat:@"%d",7];
NSRange r3 = {3,1};
[str11 deleteCharactersInRange:r3];
NSLog(@"str11 = %@",str11);
//不可变字符串也能添加新的字符,只不过它已经产生了一个新的字符串对象,跟原来的那个已经没有关系了
[self.window makeKeyAndVisible];
return YES;
集合
数组指针 char *str = {"ios","andriod","html"};
OC集合(容器)分类
1)数组Array
2)字典Dictionary
3)集合set
在集合(容器)中添加一个对象,这个对象的引用计数会增加一,且控制权归系统。你只能释放当初你alloc的那个引用计数,添加对象时增加的那个引用计数会在容器被销毁时有系统自动释放。
数组NSArray
是不可变列表集合
1)可以存在多个对象(对象可以为同一类型,也可为不同的类型)
2)每个对象使用下标来表示
3)最后以nil结束
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
//数组NSArray
NSArray *arry = [[NSArray alloc]initWithObjects:@"ios",@"wphone",@"Android", nil];//初始化
// NSArray *arry = [NSArray alloc]initWithObjects:@"ios",@"wphone",@"android", nil];
//获取数组里面元素的个数
//获取数组中元素
NSString *str = [arry objectAtIndex:0];
NSLog(@"str = %@",str);
//数组长度
NSLog(@"arrcount = %d",arry.count);
[arry release];
//遍历数组对象方法一
arry = [NSArray arrayWithObjects:@"ios",@"html5",@"cocoa2D", nil];
for (int i = 0; i < arry.count; i++) {
NSString *str = [arry objectAtIndex:i];
NSLog(@"str1 = %@",str);
}
//遍历数组对象方法二
for (NSString *str in arry){
NSLog(@"str = %@",str);
}
//可变数组NSMutableArray
NSMutableArray *array2 = [[NSMutableArray alloc]initWithCapacity:10];
//添加元素
[array2 addObject:@"C#"];
[array2 addObjectsFromArray:arry];
for (NSString *str in array2)
{
NSLog(@"arry2 = %@",array2);
}
NSLog(@"arry2 = %@",array2);
//在数组中小括号里面的都是数组
//在集合(容器)中添加一个对象,这个对象的引用计数会增加一,且控制权归系统。
NSString *str3 = [[NSString alloc]initWithFormat:@"%d",10];
NSLog(@"str3 retainCount:%d",str3.retainCount);
[array2 addObject:str3];
NSLog(@"str3 retainCount:%d",str3.retainCount);
//移除元素
[array2 removeLastObject:@"C#"];
[array2 removeObjectAtIndex:0];
[array2 removeObjectsInArray:array2];
NSRange r4 = {1,3};
[array2 removeObjectsInRange:r4];
NSLog(@"arry = %@",array2);
//替换元素
[array2 replaceObjectAtIndex:1 withObject:@"xml"];
NSLog(@"arry2 = %@",array2);
[str3 release];
[array2 release];
[self.window makeKeyAndVisible];
return YES;
字典Dictionary
键值存储
key一般是字符串
字典存储的对象无序的,使用key来表示每个对象
字典
1)创建字典
2)获取对象
3)获取所有的key
4)获取所有对象
5)字典在控制台是用{}包起来的,但是在字典中时以键值对的形式存放的
控制台的输出:
2013-07-12 17:04:57.447 OC_7[2050:c07] mDic = {
key3 = valu3;
key4 = valu4;
key5 = valu5;
key6 = valu6;
}
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
//字典Dictionary
NSArray *arry = [NSArray arrayWithObjects:@"html",@"ios", nil];
//创建字典 初始化
NSDictionary *dic =[[NSDictionary alloc]initWithObjectsAndKeys:@"valu1",@"key1",arry,@"key2", nil];
NSLog(@"dic count = %d",dic.count);
//取元素
NSString *str = [dic valueForKey:@"key1"];
NSLog(@"str = %@",str);
NSString * arry1 = [dic valueForKey:@"key2"];
NSLog(@"arry1 = %@",arry1);
NSArray *arry2 = [dic allKeys];//key是一个数组
NSArray *arry3 = [dic allValues];
//遍历所有的key,返回一个数组,因为key是数组所以是可以遍历的
for (NSString *key in [dic allKeys]) {
NSLog(@"%@",[dic allKeys]);
}
//可变字典
NSMutableDictionary *mDic = [NSMutableDictionary dictionaryWithCapacity:10];
[mDic setObject:@"valu3" forKey:@"key3"];
[mDic setObject:@"valu4" forKey:@"key4"];
[mDic setObject:@"valu5" forKey:@"key5"];
[mDic setObject:@"valu6" forKey:@"key6"];
//打印字典内容
NSLog(@"mDic = %@",mDic);
[mDic removeObjectForKey:@"key6"];
NSLog(@"mDic = %@",mDic);
/*
NSLog(@"mDic = %u",mDic.count);
for (NSString *key2 in [mDic allKeys]){
NSLog(@"%@",[mDic allKeys]);
}
*/
//获取所有的key
[dic release];
[self.window makeKeyAndVisible];
return YES;
集合set
集合时无序的,其存储的对象不允许出现重复的
创建,添加,删除,求交集,补集,差集