这是我参与「第四届青训营 」笔记创作活动的的第2天
主要内容
-
Framework简介
-
Foundation框架
-
NSObject类
-
数据类型
- NSString
- NSArray与NSMutableArray
- NSDictionary与NSMutableDictionary
-
-
个人总结
Framework简介
-
Framework:框架,是一个通用、可复用且具备特定功能的软件或环境。
-
iOS System Frameworks:包括动态代码库、资源文件、头文件等。从底层向上依次为:
- Core OS(操作系统层):最靠近硬件的框架,常用于直接处理安全事务或和其他设备通讯。
- Core Services(服务层):提供应用程序所需要的基础系统服务。 Foundation在此层。
- Media(媒体层):提供包括图形,音频,视频相关的技术支持。
- Cocoa Touch(触摸层):与界面有关。UIKit在此层。
Foundation框架
Foundation框架为 App和其他框架提供了基础的能力,包括数据存储持久化,文本处理,日期时间计算,排序筛选,还有网络。并且Foundation框架的能力是MacOS, iOS, watchOS, tvOS通用的。
- Foundation框架的引入(引入伞头文件):
import <Foundation/Foundation.h>
NSObject类
NSObject是一个遵守NSObject协议的类,是OC中所有类的根类 (root Class)。
-
NSObject - 分配内存空间 & 初始化:
-
alloc + init:
MyInterface *willken = [[MyInterface alloc] init];alloc会返回一个空的实例,init方法会进行初始化。
-
new(与上述方法等价)
MyInterface *willken = [MyInterface new];
-
-
NSObject - 方法调用:
-
NSObject - 类关系判断
- 获取当前对象的类:
- (Class)class; - 判断对象是否是给定类或给定类子类的实例:
- (BOOL)isKindOfClass:(Class)aClass; - 判断对象是否是给定类的实例:
- (BOOL)isMemberOfClass:(Class)aClass; - 判断对象是否遵从给定的协议:
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
- 获取当前对象的类:
数据类型
NSString
-
NSString - 创建
-
直接使用@进行创建:
NSString *stringObject = @"hello"; -
先创建C语言字符串,再将其转换为NSString对象:
// C语言字符串 -> NSString 对象 char *cString = "willken"; NSString *stringObject1 = [NSString stringWithUTF8String:"willken"]; -
初始化空字符串:
NSString *stringObject2 = [[NSString alloc] init]; -
用@初始化:
NSString *stringObject3 = [NSString stringWithString:@"hello"]; -
字符串拼接:
NSString *stringObject4 = [stringObject3 stringByAppendingString:@" world"];
-
-
NSString - 类型转换
-
int转NSString
int num = 123; NSString *stringObject5 = [[NSString alloc]initWithFormat:@"%d , %@", num, "str"]; -
NSString转bool:
BOOL boolValue = [numberStr boolValue]; -
NSString转int:
int intValue = [numberStr intValue]; -
NSString转float:
float floatValue = [testStr floatValue]; -
NSString转double:
double doubleValue = [testStr doubleValue];
-
-
NSString - 子字符串
-
获取字符串长度:
NSUInteger length = [stringObject length]; -
根据索引获取字符:
unichar index_char = [stringObject characterAtIndex:0]; -
截取字符串(从索引位置到结尾):
NSString *subStr1 = [stringObject substringFromIndex:1]; -
截取字符串(从开始到索引位置):
NSString *subStr2 = [stringObject substringToIndex:2]; -
截取字符串(从索引开始取特定长度字符串):
NSRange range = NSMakeRange(1, 2); NSString *subStr3 = [stringObject substringWithRange:range];
-
NSArray与NSMutableArray
NSArray是NSObject子类,类似C/C++中的数组,同时NSArray中存储的是NSObject类。若要存放数字,可将其转为NSNumber类型后再进行存放。NSArray一旦创建后无法更改,不可增删。NSMutableArray可实现增删。
-
NSArray - 创建
-
空数组
NSArray *arr1 = [NSArray array]; NSArray *arr2 = [[NSArray alloc] init]; -
利用@创建数组
NSArray *arr3 = @[@"iOS", @"Android", @"Server"]; NSArray *arr4 = [NSArray arrayWithObjects:@"iOS", @"Android", @"Server"];
-
-
NSArray - 查询
- 返回对应位置的元素:
NSObject *obj1 = array[0]; - 返回元素的对应位置:
NSUInteger index = [array indexOfObject:obj1]; - 判断是否包含指定对象:
[array containsObject:str];返回布尔值。 - 遍历:
for (NSString *strObj in array) {...} - 数组内元素个数:
array.count
- 返回对应位置的元素:
-
NSMutableArray - 数据增删
// 新增对象 [mutableArrayObject addObject:@"StringObject"]; [mutableArrayObject insertObject:@(0) atIndex:0]; [mutableArrayObject addObjectsFromArray:@[@"StringObject", @(1)]]; // 移除末尾元素 [mutableArrayObject removeLastObject]; // 删除指定下标对应元素 [mutableArrayObject removeObjectAtIndex:0]; // 移除全部元素 [mutableArrayObject removeAllObjects];
NSDictionary与NSMutableDictionary
NSDictionary是基于Key-Value键值对访问的数据类型。与NSArray类似,无法增删,可增删的Dictionary是NSMutableDictionary
-
NSDictionary - 创建
-
NSDictionary *dict1 = @{ @"key1":@"value1", @"key2":@"value2" }; -
NSDictionary *dict5 = [[NSDictionary alloc]initWithObjects:@[@"value1",@"value2"] forKeys:@[@"key1",@"key2"]];
-
-
NSDictionary - 访问
- 根据key获取value:
NSObject *getValue = [dictionary1 objectForKey:@"key1"];或id getValueDirect = dictionary1[@"key1"];。 - 获得key合集:
NSArray *keysArr = [dictionary1 allKeys]; - 获得value合集:
NSArray *valuesArr = [dictionary1 allValues]; - 遍历:
[dictionary1 enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { NSLog(@"key = %@ value = %@",key,[dictionary1 objectForKey:key]); }]; - 获取字典中元素个数:
[dictionary1 count];
- 根据key获取value:
-
NSMutableDictionary - 数据增删
//改变字典中的key和value [mutableDictionary setObject:@"value2" forKey:@"key2"]; [mutableDictionary setValue:@"value3" forKey:@"key3"]; mutableDictionary[@"key4"] = @"value4"; //移除某一个key对应的元素 [mutableDictionary removeObjectForKey:@"key2"]; //移除所有元素 [mutableDictionary removeAllObjects];
个人总结
本篇笔记重点记录整理了Foundation框架中的NSObject类以及常见的数据类型。重点应该关注数组与字典都会详细分为可变以及不可变两种类型。同时应该重点注意在OC中Array与Dictionary中存放的都是NSObject类,而不是基本变量类型(int,float,long,等),这样的设定保证了NSArray中的对象是等长的,即都是对象指针。以上两点是与C/C++有较大差异的地方,需要重点注意。