OC 常用数据类型|青训营笔记

243 阅读3分钟

这是我参与「第四届青训营-iOS专场」笔记创作活动的第3天。我将会简单讲解一下Objective-C(以下简称OC)编程语言中一些常用的数据类型。

NSString

继承于NSObject,用来处理OC中的字符串。

注意:相比于C语言中的char类型,NSString不是纯粹的字符串,因为它是一个类,拥有变量,属性,和方法。

创建

NSString有以下几种最常用的创建方式:

  1. NSString *stringObject = @"hello";
    • 切记一定要写 @
  2. 将C语言的字符串转为一个NSString对象
    NSString *stringObject1 = [NSString stringWithUTF8String:"hello"];
  1. 用alloc init来创建空的字符串对象
    NSString *stringObject2 = [[NSString alloc] init];
    NSString *stringObject3 = [NSString stringWithString:@"hello"];

一些常用方法和属性

  • 我们可以用[stringObject length]来获取stringObject的长度
  • 可以用[stringObject characterAtIndex:0]来获取stringObject中位于第一位的字符
  • 截取子字符串:
    • [stringObject substringFromIndex:1] (从索引位置到结尾)
    • [stringObject substringToIndex:3] (从开始到索引位置)
    • 也可以用NSRange指定所需截取的索引位置和长度

类型转换

可以用initWithFormat方法将其他(bool,浮点,整数等)类型单独或组合转换成字符串。

例:

int a = 123; 
NSString *stringObject5 = [[NSString alloc]initWithFormat:@"%d , %@", a, "str"];

如果已有字符串,可以使用boolValue,intValue,floatValue,doubleValue等方法将字符串转换成对应基础类型。

NSArray

同样继承于NSObject,用来处理OC中的数组。NSArray中存放的必须是OC对象。所以如果想保存一些基础类型,需要把它们封装成OC对象才能放在数组里面。

创建

NSArray有以下几种最常用的创建方式:

  1. NSArray *arr = [NSArray array];
    • 创建一个空数组
    • 也可以用NSArray *arr = [[NSArray alloc] init];
  2. 使用@[...]格式创建非空数组
NSArray *arr = @[@"iOS", @"Android", @"Server"];

也可以用

NSArray *arr = [NSArray arrayWithObjects:@"iOS", @"Android", @"Server"];
  1. 限制存放对象
    NSArray<NSNumber *> *numberArrayObject = @[@(1), @(-1), @(3.3)];

注:@(value)自动将value转化成一个NSNumber对象

一些常用方法和属性

  • 我们可以用array.count来获取array中所含元素的个数
  • 可以用array[0]来获取array中存于第一位的对象
  • 可以用[array containsObject:str]来得知array中是否包含指定的对象

NSArray vs. NSMutableArray

NSArray是不可变(只读)数组,而NSMutableArray是可变数组,它拥有声明的增与删的方法。

相比于NSArray,如果使用NSMutableArray

  • 对象数据可能被修改
  • 线程不安全
  • 查找性能较差
  • 一般用作方法内的临时变量,可做增删

NSDictionary

同样继承于NSObject,字典可以用来存放Key-Value pairs。同样,一个字典中的Key或者Value也都要存储OC对象。

NSDictionary有以下几种最常用的创建方式:

  1. 创建单一Key-Value pair
    • NSDictionary *dict = @{ @"key1":@"value1" };
    • 也可以用[NSDictionary dictionaryWithObject:@"key1" forKey:@"value1"]
  2. 创建多个Key-Value pairs
NSDictionary *dict = @{ @"key1":@"value1", @"key2":@"value2" };
NSDictionary *dict = [[NSDictionary alloc]initWithObjects:@[@"value1",@"value2"] forKeys:@[@"key1",@"key2"]];

也可以用

NSArray *arr = [NSArray arrayWithObjects:@"iOS", @"Android", @"Server"];
  1. 指定字典中存放的类型
NSDictionary<NSString*, NSNumber*> *dictionaryObject = @{ @"numberKey1": @(0), @"numberKey2": @(1), }

一些常用方法和属性

  • 我们可以用[dictionary1 count]来获取dictionary1中所含元素的个数
  • 可以用[dictionary1 objectForKey:@"key1"];来获取dictionary1key1对应的值
    • 等同于dictionary1[@"key1"]
  • 可以用[dictionary1 allKeys]来获取dictionary1中所有Key的集合
  • 同理,用[dictionary1 allValues]来获取dictionary1中所有Value的集合

总结

OC中有很多可供开发人员使用的数据类型,各有利弊。我们应该分析所需储存数据的结构,从而判断哪一个数据类型擅长于储存这个数据结构。并且,像Array和Dictionary都有可变和不可变两种,它们各自的优缺点也在前文有所罗列,我们应该分析利弊从而决定应该使用哪种数据类型,利用哪些自带的方法和属性来轻松实现简单的功能。