1.+(void)fun;
类方法没有隐藏参数self所以 1类方法不能引用实例变量。2类方法不能调用对象的方法。
类名直接调用类方法 [CFLCar func];留下简单的对外接口
1.NSString 一个字符根据编码占不同字节
%@ 是不可改变的字符串,每一个字符都不能改。只能查询。
NSMutableString是NSString的子串,是可变字符串;
(1)[str length] 字符串长度
[str characterAtlndex: i ]返回地 i 个字符;
(2)创建
NSString * p=@“dfsfa”;
[NSString stringWithString:@“%@ %@”,str,str2 ]; 复制
NSString * str5 = [NSString stringWithUTF8String:str2];
NSString * str4 = [NSString stringWithString:str1];
-(id)stringWithString;
-(id)stringWithFormat
-(id)stringWithUTF8String
2.字符串比较
//按字符串内容(逐个相比)比较大小
if(str1&&[str1 compare:str2]==NSOrderedSame){
NSLog(@"equal");
}
else if([str1 compare:str2]==NSOrderedDescending){
NSLog(@"Descending");
}
else {
NSLog(@"Ascending");
}
//比较相等
if([str1 isEqualToString:str2]==YES){
NSLog(@"相等");
}
//判断子串开头、结尾
NSString *str6=@"13654125251";
if([str6 hasPrefix:@“136"]==YES){
NSLog(@"YES");
}
if ([str6 hasSuffix:@"251"]) {
NSLog(@“yes");
}
3.查找子字符串的位 置和范围
NSString * str1 = @"床前明月光";
NSRange range = [str1 rangeOfString:@"月"];
if (range.location!=NSNotFound) {
NSLog(@"%lu,%lu",range.location,(unsigned long)range.length);
}
4.子串提取
NSString * str = @"Hello,world";
NSString * str1 = [str substringToIndex:5];
NSString * str2 = [str substringFromIndex:6];
NSString * str3 = [str substringWithRange:NSMakeRange(0, 5)];
NSLog(@"%@ %@ %@",str1,str2,str3);
5.字符串转其他类型
char name[20] = "Tom";
//c strng to NSString
NSString * str1 = [NSString stringWithFormat:@"%s",name];
NSString* str2 = [NSString stringWithUTF8String:name];
NSLog(@"%@ %@",str1,str2);
//NSString to C string
const char *str3 = [str1 UTF8String];
NSLog(@"%s",str3);
//NSString <==> number
NSString * str4 = @"123";
NSLog(@"%d %g",[str4 intValue],[str4 doubleValue]);
//大小写zhuanh
NSString * str5 = @"dskdjJKLKLK";
NSString * str6 = [str5 uppercaseString];
NSLog(@"%@ %@",str6,[str5 lowercaseString]);
//字符拼接
NSLog(@"%@",[str5 stringByAppendingFormat:@"%@",str6]);
6.可变字符串
NSMutableString 继承自 NSString
1.凡是NSString的方法,NSMutableString都能用
2.凡是传参需要传入NSString * 传入NSMutableString *也行
【专有方法】
1.重置字符串内容
[str setString:@"0123456789"];
2.增 append
[str appendString:@"9876543210"];
[str appendFormat:@"%d %c %.2f", 34, 'T', 2.34];
3.插入
[str insertString:@"ABC" atIndex:3];
4.删 delete
[str deleteCharactersInRange:range];
5.改 replace
[str replaceCharactersInRange:range withString:@“XXXXXXXXXXXXXXX”];(先找到range 用rangeofstring函数着字符串)
6查 rangeOfString:
7.字符串去除两端内容
NSString * str4 = @"kkd123ld";
//stringByTrimmingCharactersInSet去除字符串两端指定字符集内的字符
//去掉首尾两端的空格
NSString* str5 = [str4 stringByTrimmingCharactersInSet:[NSCharacterSet letterCharacterSet]];
NSLog(@"%@ %@",str4,str5);
NSString * str6 = @",md123./";
NSCharacterSet * mySet = [NSCharacterSet characterSetWithCharactersInString:@",md./"];
NSString * str7 = [str6 stringByTrimmingCharactersInSet:mySet];
NSLog(@"%@",str7);
删除字符串;=剩余元素以;=为分割的对象保存到数组
NSArray *array=[str2 componentsSeparatedByCharactersInSet:
[NSCharacterSet characterSetWithCharactersInString:@"; =“]];
8.将文件已字符串形式读入
NSString *p=[NSString stringWithContentsOfFile:@"/Users/qianfeng/Desktop/未命名.rtf"
encoding:NSUTF8StringEncoding error:nil];
(路径、编码方式、nil)
9.判断字符串中是否含有 某种类型的 元素
NSString *testString = @"春1mianBU觉晓";
int alength = [testString length];
for (int i = 0; i<alength; i++) {
char commitChar = [testString characterAtIndex:i];
NSString *temp = [testString substringWithRange:NSMakeRange(i,1)];
const char *u8Temp = [temp UTF8String];
if (3==strlen(u8Temp)){
NSLog(@"字符串中含有中文");
}else if((commitChar>64)&&(commitChar<91)){
NSLog(@"字符串中含有大写英文字母");
}else if((commitChar>96)&&(commitChar<123)){
NSLog(@"字符串中含有小写英文字母");
}else if((commitChar>47)&&(commitChar<58)){
NSLog(@"字符串中含有数字");
}else{
NSLog(@"字符串中含有非法字符");
}
}
- id 是通用 对象 指针
- 内置类型要放到数组,需要封装
int a=10;
NSNumber *numA=[NSNumber numberWithInt:a];(封装对象)numA是对象
int b = [numA intValue];(解封装)
3.NSArray数组元素类型是id,是对象的地址。可以储存不同类型的对象
是不可变数组 NSMutableArray是可变数组
1.初始化
NSArray * a=[NSArray arrayWithObjects:@"1",@"2", nil];
NSArray *c=@[@“1”,@"2"]; NSArray *c=@[str1,str2];
2.遍历
(1)循环
NSInteger len=[c count]; 元素个数
id p = [c objectAtIndex: i ];得到制定下标的数组元素(对象地址)
(2)快速枚举
只能访问oc对象集合
for (id p in c) {
NSLog(@“%@“,p); (从头开始逐一给p直到c为nil。p最后为nil)
}
注意一个问题。在枚举期间不能修改集合
(3)枚举器
NSEnumerator * enumer=[c objectEnumerator];
id p;
while(p = [enumer nextObject]){
NSLog(@“%@”,p);
}
//创建一个逆序枚举器NSEnumerator * enume2 = [array reverseObjectEnumerator]; while (obj = [enume2 nextObject]) {
NSLog(@"obj = %@",obj); }
(1)(3)可增删数组元素 (2)速度较快
3.判定数组是否包含某个元素
BOOL is=[a containsObject:@“man”];
if (is){
NSLog(@“YES”);
}
4.得到数组第一个对象,最后一个对象(last)
NSLog(@"%@",[c firstObject]);
5.数组查找
NSLog(@"%lu",[c indexOfObject:@“2"]); 内容比较 返回下标
NSLog(@"%lu",[c indexOfObjectIdenticalTo:@“2"]) 地址查找
6.数组排序 前两种方法
sortedArrayUsingFunction:中函数必须自己写
NSArray *sortedArray = [array sortedArrayUsingFunction:compare context:nil];
//先比较姓 在比较名字
-(NSComparisonResult)compareLastName:(student*)stu{
NSComparisonResult result = [self.lastname compare stu.lastname];
if(result==NSOrderedSame){
result=[self.firstname compare:stu.firstname];
}
return result;
}
//输出用description重写
-(NSString* )description {
return [NSString stringWithFormat:@“%@%@“,self.lastname,self.firstname];
}
使用selector排序 (排序后产生新数组的不变的数组,原来数组不变,所以要用新的数组接收这个返回值);
sortedArrayUsingSelector 数组元素是foundation类的对象,不需要写比较方法,调用响应的类的比 较方法就可以
如果数组元素是自定义类的对象,在你的类里必须自己写一个比较函数
NSArray * array 2= [array sortedArrayUsingSelector:@selector(compare:)];调用compare方法进行排序默认从小到大
NSLog(@"%@",sortedArray);
6.可变数组
NSMutableString *array=[[NSMutableArray alloc] init];
//增 追加
[array addObject:@"Four"];
//插入
[array insertObject:@"Four" atIndex:1];
//删
[array removeAllObjects];
[array removeLastObject];
//删除指定索引处元素
[array removeObjectAtIndex:1];
//传入地址,删除指定元素,如果传入的是字符串,删除所有和字符串相等的元素。
[array removeObject:@"One"];
//改
//用某个对象,替换当前某索引处的元素
[array replaceObjectAtIndex:0 withObject:@"Five"];
//交换两个元素的位置
[array exchangeObjectAtIndex:0 withObjectAtIndex:2];
/*—————————————数组元素拼接成字符串
把数组元素拼接 成字符
NSString * ptr = [array componentsJoinedByString:@“###"];
删除字符串;=剩余元素以;=为分割的对象保存到数组
NSArray *array=[str2 componentsSeparatedByCharactersInSet:
[NSCharacterSet characterSetWithCharactersInString:@"; ="]];
NSDictionary 字典
NSMutableDictionary可变字典
字典时无序的,对字典排序,应先生称数组,对数组排序
字典对象是由 键—值对象构成的数据集合;同一字典,键必须唯一。 键值对是无序的
1.创 建
NSDictionary *dict1=[NSDictionary dictionaryWithObjectsAndKeys:s1,@“o1”,@“k1”,@“o2”,@“k2”
nil];//值 键
NSDictionary *dict2=@{@“101":s1,@"102":s2,@"103":s3,@"104":s4};//键 值
2.存 取
NSLog(@"%@",[dict2 objectForKey:@“101"]); 得到@“101”所对应的值
NSLog(@"%@", dict2[@“102”]);得到键所对应的值
NSArray *key =[dict2 allKeys]; 得到所有的键
NSLog(@"%@",key);
NSArray *valuis=[dict2 allValues]; 得到所有的键值
NSLog(@“%@",valuis);
3.遍 历
//根据键的数组遍历值(优先选择)
for (NSString * key in dict2) {
NSLog(@"%@ %@",key,dict2[key]);
}
//枚举器
NSEnumerator *keyEnumerator =[dict2 keyEnumerator];
NSEnumerator *key;
while(key=[keyEnumerator nextObject]){
NSLog(@"%@ %@",key ,dict2[key]);
}
4.排 序
NSArray *result= [dict2 keysSortedByValueUsingSelector:@selector(compare:)];
( 根据值的内容重写compare)
NSLog(@"%@",result);
//对值的内容排序,自定义compare函数
5.可变字典
1.创建
NSMutableDictionary *dict2=[NSMutableDictionary dictionaryWithCapacity:0]//有0个键值对的可变字典
NSMutableDictionary *dict =[[NSMutableDictionary alloc]init];
//不能用 NSMutableDictionary *dict=@{@“101":@"tom",@"102":@"jerry"}
2.赋值
[dict2 setDictionary:@{@"101":@"tom",@"102":@"jerry"}];
[dict2 setObject:@"zhabg" forKey:@"103"];// 如果有103这个键那就是修改。没有就初始