OC面向对象
- 类内调用成员变量 不是属性 属性时get set方法 类外调用成员变量用指向符号
- 减号对象方法 用对象调用
- 加号类方法 用类名调用 方法中不能调用成员变量 只能调用静态变量
- 返回值类型 id 万能类型 instancetype 当前类类型 初始化方法两种类型都行其他用后者
- 输入init 可自动补全重写 初始化方法格式
- 成员变量默认访问修饰符 受保护 package 框架内受保护 框架外私有
- 方法没有访问修饰符 声明后可在类外调用 可继承s elf调用 不声明直接实现不可在类外调用不能被继承
- 没有多继承 java使用接口 oc使用协议实现
- oc不支持方法重载 重写用super 调用父类方法 self 调用当前类方法
- 可用父类变量接收子类对象
Foundation框架
字符串
- 实例化创建字符串需要自己释放内存 直接赋值不需要自己释放
- 格式化字符串 stringWithFormat 拼接字符串 strigByAppendingString lowercaseString uppercaseString 大小写转换 判断前缀 hasPrefix 判断后缀 hasSuffix 判断字符串是否相同 isEqualToString 比较字符串 NSComparsionResult
BOOL hasSuffix=[str hasSuffix:@".com"];
按照指定字符分割字符串
NSArray *strArray=[str componentsSeparatedByString:@","];
按照范围截取字符串
NSRange range=NSMakeRange(1,5);
NSString *str=[str substringWithRange:range];
NSLog(@"str=%@",str);
从某一位开始截取后面字符串
NSString *str=[str substringFromIndex:2];
从开头截取到某一位
NSString *str=[str substringToIndex:8];
将字符串拆分
for(int i=0;i<[str length];i++)
{
NSLog(@"%c",[str characterAtIndex:i];
}
查找
- 查找指定字符串位置
NSString *str=@"ab cd ef ab";
NSRange range=[str rangeOfString:@"ab"];
NSLog(@"range.location:%ld range.length%ld",range.location,range.length);
//正向查找 只能查找第一个匹配的
替换
- 替换某个范围内容
NSString str1=[str stringByReplacingCharactersInRange:NSMakeRange(0,5) withString:@"hello"];
- 用指定字符串替换
NSString *str1=[str stringByReplacingOccurrencesOfString:@" " withString:(NSString*)]
读取文件
文件来源:本地文件;网络文件
路径类 NSURL
字符串和路径转换
NSString *str=@"www.baidu.com";
网络路径
NSURL *httpURL=[NSURL URLWIthString:str];
本地路径
NSString *fileURL=[NSURL fileURLWithPath:str];
读取网络文件
NSString*httpStr=[NSString stringwithContentsOfURL:httpURL encodig:NSUTF8StringEncoding error:nil];
读取本地文件
NSString *fileStr=[NSString stringwithContentsOfFile:@"/Users/.../.txt" encoding:NSUTF8StringEncoding error:nil];
写入文件
NSString *str=@"hello";
BOOL isOk=[str writeToFile:@"/Users/.../.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
if(isOk) NSLog(@"文件写入成功");
可变字符串
可变字符串是字符串子类
实例化
字符串范围是10 可以提升性能 长度可以超越10
NSMutableString *str=[[NSMutableString alloc]init]withCapacity:10];
[str setString:@"Hello"];
str=@"Hello";只能给普通字符串赋值
可变字符串方法
- 追加字符串
[str appendingString:@" world"];
int a=10;
[str appendingFormat:@"-*d",a]; 追加格式化字符串
- 替换字符串
NSRange range=[str rangeOfString;@"world"];
[str replaceCharactersInRange:range withString:@"IOS"];
- 插入字符串
[str insertString:@"A" atIndex:6];
4.删除字符串
NSRange range=[str rangeOfString;@"Aios"];
[str deleteCharactersInRange:range];
数组
OC的数组可以存储不同类型对象
OC数组只能存储对象 基本类型int char double 不能直接存储 要转化成对象 保存的为对象指针,占用空间较少
不可变数组实例化时必须赋值
NSArray *array=[[NSArray alloc]initWithObjects:@"1",@"2",@"3",@"4",@"5",nil];
数组长度
int count=(int)array.count;
判读数组中是否包含对应对象
BOOL isHave=[array containObject:@"2"];
if(isHave)
取得数组中最后一个首个元素
NSString *str=[array lastObject];
str=[array firstObject];
取得数组中下标为n的元素
str=[array objectAtIndex:3];
打印元素对应下标 若元素不存在 打印-1
int index=(int)[array indexOfObject:@"b"];
数组的遍历
- 基本for循环
for(int i=0;i<array.count;i++)
{
NSString *str=[array objectAtIndex:i]
NSLog(@"str=%@",str);
}
数组中有自定义对象
Person *p=[[Person alloc]init];
p.personName=@"张三";
NSArray *array=[[NSArray alloc]initWithObjects:@"a",@"b",p,@"c",nil];
for(int i=0;i<array.count;i++)
{
NSString *str=[array objectAtIndex:i]
NSLog(@"str.len",str.length); 有的方法只有字符串,自定义对象p没有
}
- 快速枚举
使用快速枚举需要数组中数据类型一致
for(NSString *str in array)
{
NSLog(@"str=%@",str); 有自定义对象显示地址
}
- 迭代器
可变数组
实例化
NSMutableArray *array=[[NSMutableArray alloc]init];
Person *p1=[[Person alloc]initWithName:@"张三" ];
Person *p2=[[Person alloc]initWithName:@"李四" ];
Person *p3=[[Person alloc]initWithName:@"王五" ];
添加元素
NSArray *personArray=[[NSArray alloc]initWithObjects:p2,p3,nil];
NSMutable*array=[[NSMutableArray alloc]init];
[array addObject:p1];
将personArray当作对象添加到array中
[array addObject:personArray];
把personArray中所有元素添加到array数组中
[array addObjectsFromArray:personArray];
删除元素
- 删除所有元素
[array removeAllObjects];
- 删除最后一个元素
[array removeLastObject];
- 删除指定元素
[array removeObject:p2];
NSLog(@"%@",array);
- 删除指定下标元素(注意元素个数 )
[array removeObjectAtIndex:2];
- 交换元素位置
[array exchangeObjectAtIndex:0 withObjectAtIndex:1];
字典
- 存储的内存不连续
- key和value对应 kvc键值编码
- @{键值} 代表字典
声明字典
NSDictionary *dict=[NSDictionary dictionaryWithObject:@"1" forKey:@"a"];
常用创建方式
NSDictionary *dict=[NSDictionary dictionarywithObjects:[NSArray arrayWithObjects:@"1",@"2",@"3",nil] forKeys:[NSArray arrayWIthObjects:@"a",@"b",@"c" nil]];
NSDictionary *dict=@{@"a":@"1",@"b":@"2"};
int count=(int)[dict count];
根据键取得值
NSString *value=[dict valueForKey:@"b"];
NSString *value=[dict objectForKey:@"b"];
NSArray*allValues=[dict allValues];取得字典中所有键值对的值
NSArray*allKeys=[dict allKeys];取得字典中所有的键
NSArray *str=[dict objectsForKeys:[NSArray arrayWithObjects:@"a",@"b",@"d",nil]notFoundMaker:@"not fount"]; 通过多个key找到多个对应的值
遍历字典
通过key找到每个值
for(NSString *key in dict)
{
NSLog(@"%@=%@",key,[dict objectForKey:key]);
}
迭代器枚举
NSEnumerator *en=[dict keyEnumerator];
id key=nil;
while(key=[en nextObject])
{
NSLog(@"key-%@",key);
}
可变字典
声明
NSMutableDictionary *dict=[[NSMutableDictionary alloc]init];
添加键值对
[dict setObject:@"1" forKey:@"a"];
[dict setObject:@"2" forKey:@"b"];
删除键值对
[dict removeAllObjects];
[dict removeObjectForKey:@"b"];删除指定key对应的键值对
[dict removeObjectsForKeys:[NSArray arrayWithObjects:@"a",@"b",nil]]删除多个keys对应的键值对
字典是无序的 没有交换顺序的方法