NSString
创建
// @"" 创建 NSString 对象 (常用)
NSString *stringObject = @"hello";
// C语言字符串
char *cString = "James";
// C语言字符串 -> NSString 对象
NSString *stringObject1 = [NSString stringWithUTF8String:"James"];
// 初始化一个空字符串
NSString *stringObject2 = [[NSString alloc] init];
// 初始化一个字符串
NSString *stringObject3 = [NSString stringWithString:@"hello"];
// 拼接一个字符串
NSString *stringObject4 = [stringObject3 stringByAppendingString:@" world"];
类型转换
// 创建格式化字符串 - @"123 , str"
int a = 123;
NSString *stringObject5 = [[NSString alloc]initWithFormat:@"%d , %@", a, "str"];
// MARK: NSString转成基础类型
NSString *numberStr = @"123";
// BOOL
BOOL boolValue = [numberStr boolValue];
// int
int intValue = [numberStr intValue];
//float
float floatValue = [testStr floatValue];
// double
double doubleValue = [testStr doubleValue];
子字符串
NSString *stringObject5 = @"hello";
// 获取字符串的长度
NSUInteger length = [stringObject5 length];
// 获取索引下标的字符
unichar index_char = [stringObject5 characterAtIndex:0];
// 截取字符串,从索引位置到结尾
NSString *subStr1 = [stringObject5 substringFromIndex:1];
// 截取字符串,从开始到索引位置
NSString *subStr2 = [stringObject5 substringToIndex:3];
// 截取字符串,从索引开始,取长度个数组成的字符串
NSRange range = NSMakeRange(1, 2);
NSString *subStr3 = [stringObject5 substringWithRange:range];
NSArray
创建
// 空数组
NSArray *arr1 = [NSArray array];
// 效果同上
NSArray *arr2 = [[NSArray alloc] init];
// @[...] = NSArray对象创建
NSArray *arr3 = @[@"iOS", @"Android", @"Server"];
// 效果同上
NSArray *arr4 = [NSArray arrayWithObjects:@"iOS", @"Android", @"Server"];
// 如果需要放基本类型,可使用NSNumber or @(value) = 自动转成NSNumber对象
NSNumber *numberObject = [[NSNumber alloc] initWithInt:100];
NSArray *arr4 = [NSArray arrayWithObjects:@(123), numberObject];
// 限制存放对象为NSNumer
NSArray<NSNumber *> *numberArrayObject = @[@(1), @(-1), @(3.3)];
访问
需要特别注意的是数组的查询都是针对对象指针的,也就是如果你拿另外一个虽然是同样内容的字符串查询,但因为不是同个对象,也会有查询不到的情况。
NSString *str = @"bytedance";
NSArray *array = @[str, @"iOS", @"Android"];
// count 数组中所含元素个数
NSLog(@"count = %d", array.count);
// 返回对应位置对象
NSObject *obj1 = array[0]
// 返回元素对应位置(认对象)
NSUInteger index = [array indexOfObject:obj1];
// lastObject 返回数组最后一个元素
NSObject *obj2 = [array lastObject];
// containsObject 是否包含指定对象
if ([array containsObject:str]) {
// true
}
if ([array containsObject:@"iOS"]) {
// true
}
//使用for循环遍历
for (NSString *strObj in array) {
NSLog(@"%@", strObj);
}
NSMutableArray 数据增删
//MARK: NSMutableArray 数组增删 NSMutableArray *mutableArrayObject = [[NSMutableArray alloc] init];
// 新增任意对象
[mutableArrayObject addObject:@"StringObject1"];
// 在指定下标添加对象
[mutableArrayObject insertObject:@(0) atIndex:0];
// 批量添加
[mutableArrayObject addObjectsFromArray:@[@"StringObject2", @(1)]];
// 移除末尾
[mutableArrayObject removeLastObject];
// 删除指定下标
[mutableArrayObject removeObjectAtIndex:0];
// 移除全部
[mutableArrayObject removeAllObjects];
NSDictionary
创建
// @{} = 创建NSDictionary对象
NSDictionary *dict1 = @{
@"key1":@"value1"
};
// 效果同上
NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"key1" forKey:@"value1"];
// 多Key
NSDictionary *dict1 = @{
@"key1":@"value1",
@"key2":@"value2"
};
//效果同上
NSDictionary *dict5 = [[NSDictionary alloc]initWithObjects:@[@"value1",@"value2"]
forKeys:@[@"key1",@"key2"]];
// 指定保存类型
NSDictionary<NSString*, NSNumber*> *dictionaryObject = @{
@"numberKey1": @(0),
@"numberKey2": @(1),
}
访问
如果这个字典在声明时没有加上类型限制Value是什么类型那不管使用key下标直接访问或是透过 objectForKey 方法访问,返回的都是id类型,也就是可能是任意类型的对象,
在调用这个从字典里取出来的对象方法时,谨慎一点都要先判断过类型,否则如果这对象不是我们预期的类型,我们还去掉用方法,就会导致崩溃
NSDictionary *dictionary1 = @{
@"key1": @"value1"
};
// count (字典元素个数 key:value 是一一对应的,所以是算作一个的)
int dictionary1Count = [dictionary1 count];
// objectForKey: (获取一个key对应的值)
NSObject *getValue = [dictionary1 objectForKey:@"key1"];
// 等同
id getValueDirect = dictionary1[@"key1"];
// allKeys (获取key集合)
NSArray *keysArr = [dictionary1 allKeys];
//allValues (获取所有value)
NSArray *valuesArr = [dictionary1 allValues];
// 遍历所有Key,并访问对应Value
[dictionary1 enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"key = %@ value = %@",key,[dictionary1 objectForKey:key]);
}];
可变字典 NSMutableDictionary 增删
NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] initWithDictionary:@{
@"key1": @"value1"
}];
//setObject:(setValue:)forKey: (设置某Key对应值)
[mutableDictionary setObject:@"value2" forKey:@"key2"];
[mutableDictionary setValue:@"value3" forKey:@"key3"];
mutableDictionary[@"key4"] = @"value4";
//removeObjectForKey: (移除某一个key对应的元素)
[mutableDictionary removeObjectForKey:@"key2"];
//removeAllObjects (移除所有元素)
[mutableDictionary removeAllObjects];
不可变容器与可变容器比较
NSMutableArray |
NSArray |
对象数据可能被修改 |
传进去的对象不会被修改 |
线程不安全 |
线程安全 |
查找性能较差 |
查找性能较好 |
一般用作方法内的临时变量,可做增删 |
用于属性声明或是方法参数/回传值 |