NSObject 类|青训营笔记

107 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第4天


今天是7月26日,青训营的第四天,今天对昨天除iOS系统框架的有关NSObject类的知识进行整理。

NSObject类


NSObeject类是大部分类的根类(root Class),NSObject类没有父类,但遵循NSObject协议。

NSObject类定义了大量适应OC的方法,比如init方法,performSelector方法。

如何查看NSObject的头文件:

1.按着command,点击代码中的NSObject关键字,就会跳转到NSObject.h文件中有关NSObject类的位置。其中有关NSObject的方法定义。

2.按comman+shift+o,在搜索框中输入NSObject.h,查看文件。

分配内存空间和初始化

alloc方法为新对象分配内存空间

init方法初始化对象

创建对象:Student *stu=[[Student alloc] init];Student *stu=[Student new];(构造了init自定义函数后不能使用new来创建对象)

发送消息(方法调用)

respondsToSelector方法:用于判断对象是否调用方法
- (BOOL)respondsToSelector:(SEL)aSelector;

performSelector方法:调用无参无返回值方法
- (id)performSelector:(SEL)aSelector;

Student *stu=[[Student alloc] init];
    if([stu respondsToSelector: @selector(getmyname)])
    //判断对象是否调用方法 
    {
        [stu performSelector: @selector(getmyname)];
        //调用无参无返回值方法,可调用含参方法
    }
    else{
        NSLog(@"NO GET NAME");
    }
    //可用于调用私有方法

使用场景:方法是在运行时通过runtime添加的方法(在编译时不存在)或是调用未在@interface中声明的私有方法

类关系判断

获取当前对象的类:- (Class)class;

获取当前对象的父类:- (Class)superclass;

判断当前类是否是给定类的子类:- (BOOL)isKindOfClass:(Class)aClass;

判断对象是否是给定类:- (BOOL)isMemberOfClass:(Class)aClass;

判断对象是否遵从给定的协议: - (BOOL)conformsToProtocol:(Protocol *)aProtocol;

数据类型

NSString:在OC中最常用的专门处理字符串的类,以下为相关的方法

创建NSString:NSString *name=@"cy";(使用@“”)

创建空NSString:NSString *name=[[NSString alloc] init];

获取字符串长度:NSUInteger length = [name length];

获取指定下标的字符:unichar char = [name characterAtIndex:0];

截取从指定位置到末尾的字符串:NSString str = [name substringFromIndex:1];

截取从开始到指定位置到字符串:NSString str = [name substringToIndex:3];

NSArray 数组(不可变)

创建空数组:NSArray *arr=[[NSArray alloc] init];(不能存放基本类型,如需存放需转换成对应类型的对象)

数组中所含元素个数: int count = array.count;

NSMutableArray 数组(可变)

属于NSArray的子类,在NSMutableArray中声明了增删数组元素的方法

添加对象:[stu addObject:@"name"];

指定位置添加元素:[stu insertObject:@(name2) atIndex:0];

两者比较

NSArray:对象数据不会被修改,线程安全,查找性能好

NSMutableArray:对象数据可被修改,线程不安全,查找性能较差

NSDictionary 字典(不可变)

字典是一个基于Key-Value键值对访问的数据类型(类似JAVA当中的map)

NSDictionary *dictionary =@{
    @"key":@"value",
    @"key2":@"value2"
    };
    //创建字典对象,可以是多个。

NSUInteger dictionary1Count = [dictionary count];
//通过count方法获取字典中元素的个数

NSObject *getValue = [dictionary objectForKey:@"key"];
id getValueDirect = dictionary[@"key"];
//通过objectForKey获取key对应的value

NSMutableDictionary 字典(可变)

NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] initWithDictionary:@{@"key": @"value" }];
//创建NSMutableDictionary对象


总结

今天主要学习了NSObject类以及NSString、NSArray、NSDictionary的相关知识,对OC语言有了更多的了解。也成功的将所学的知识转换成自己的。希望在以后的学习日子中有更大大进步。