搜索 "==>" 寻找标记 OC基础总结: Objective-C具有相当多的动态特征,如: " 动态类型 , 动态绑定 , 动态加载" ==> copy mutableCopy 浅复制: 在复制操作中,对于被复制的对象的每一层复制都是指针复制. 深复制: 在复制操作中,对于被复制的对象至少有一层是对象复制 完全复制: 在复制操作中,对于被复制的对象的每一层都是对象复制. 一般来讲: 浅复制复制引用对象的指针 深复制 复制引用对象的内容 retain "release旧值 retain新值" 始终是浅复制 ,引用计数器+1 返回对象是否可变与被复制的对象保持一致 copy "release旧值 copy新值" 对于可变对象是深复制,引用计数器不改变,对于不可变对象是浅复制,引用计数器每次加一, "始终返回一个不可变的对象" mutableCopy 始终是深复制,引用计数不改变,"始终返回一个可变对象" 不可变对象: 值发生改变,其内存首地址随之改变 可变对象: 无论值是否改变,其内存首地址都不随之改变 copy的使用场景: "当多个指针指向同一个对象时,为避免一个指针对对象的改动对其他指针的使用产生影响, 使用copy来创建对象的副本" ==> "字符串为什么用copy" : 防止字符串内容改变影响 "block为什么使用copy" : "拷贝到堆区" block使用copy是MRC遗留下来的传统, 方法内部的block是保存在栈区的,copy操作可以使其保存在堆区 "被copy 的属性一般其类对象都遵守了NSCopying 或者NSMutateCopying协议" ==> block 使用注意: "循环引用","修改外部变量" ‘weak‘,‘assign‘ weak表示该属性为一种"非拥有关系",为这种属性设置新值的时候 setter方法不会保留新值,也不会释放旧值该特性与assign类似 weak所指向的对象被销毁的时候其指针也会设置为nil assign 的设置方法只会执行赋值操作,assign可以用于非OC对象,weak只能用于OC对象 ‘atomic‘ 默认属性,使用该修饰符修饰的属性在创建的时候会生成一些额外的代码用于编写多线程程序, ==> @property 的本质: 该关键字主要的作用就是封装对象中的数据 @property = ivar + getter + setter ==> " ivar_list " : 成员变量列表 " method_list " : 方法列表 " prop_list " : 属性列表 每次在一个类中增加一个属性,系统都会 在ivar_list中添加一个成员变量的描述 在method_list中添加setter和getter方法描述 ==> @protocol 和category中如何使用@property 在protocol中使用property只会生成setter和getter方法的声明,‘我们使用属性的目的是希望遵守我的协议的对象能实现该属性‘ 在分类中使用property也是会只生成setter和getter方法的声明,如果真的要给category增加属性的实现,需要借助runtime的两个函数: 1 > " objc_setAssociatedObject 2 > " objc_getAssociatedObject ==> runtime 如何实现weak变量的自动的置nil runtime对注册的类,会进行布局,对于weak对象会放入一个hash表中, 用weak指向的对象内存地址作为key,当此对象的引用计数器为0时会dealloc, 假如weak指向的内存地址是a ,那么就会以a为key,子啊weak表中搜索,找到所有以a为键的weak对象,设置为nil ==> @synthesize 与 @dynamic 的作用 synthesize 表示如果你没有写setter和getter方法编译器会自动添加上这两个方法 dynamic 是告诉编译器 属性的setter和getter方法自己实现,不自动生成 " 实例变量 = 成员变量 = ivar " ==> "给nil对象发送消息的结果" 在Objective-C中向nil发送消息完全有效,只是在运行的时候不会有任何作用 1 > 如果一个方法的返回值是一个对象,那么发送给nil的消息将会返回nil 2 > 如果方法返回值为指针类型 其指针大小为小于或者等于sizeof(void *)float,double等标量,发送给nil的消息将会返回0 3 > 如果方法的返回值是结构体,发送给nil的消息将返回0,结构体中的每一个字段的值都将是0 4 > 如果方法的返回值不是上述提到的情况,那么发送给nil的消息的返回值都将是未定义的 "原因如下 : objc是动态语言,每一个方法在运行的时候都会被动态转为消息发送,即: " objc_msgSend(receiver,selector) receiver : 消息发送者 selector : 发送的 " clong -rewrite-objc xxx.m 反编译OC代码为CPP代码 ==> 什么时候会报" unrecognized selector "的异常 ‘ 调用该对象的某个方法,该对象没有实现这个方法的时候 ‘ 可以通过"消息转发"进行解决 objc是动态语言 每一个方法都会动态转换为消息发送 objc_msgSend(receiver,selector) 在应用程序崩溃之前objc运行时会提供三次拯救程序崩溃的机会: 1 > Method resolution 用 + resolveInstanceMethod: 或者 + resolveClassMethod: 让你有机会提供一个函数的实现 如果你添加了一个函数实现,并返回YES,那么运行时系统会重新启动一次消息发送的过程, 如果返回NO 运行时会移到下一步,消息转发(Message Forwarding) 2 > Fast Forwarding 如果 目标对象实现了 - forwardingTargetForSelector: runtime这时就会调用这个方法,给你把这个消息转发给其它对象 只要这个方法返回的不是nil 和self 整个消息发送的过程就会被重启,当然发送对象就会变成你返回的那个对象, 否则继续 Normal Forwarding 这里叫Fast ,下一步不会创建任何对象,但是下一步转发会创建一个NSInvocation对象,所以相对快点 3 > Normal Forwarding 这一步是Runtime给你最后一次挽救程序的机会 ‘首先会发送 - methodSignatureForSelector: 消息获得函数的参数和返回值类型. 如果 methodSignatureForSelector: 返回nil runtime 则会发出 - doesNotRecognizeSelector: 消息,程序挂了 如果返回一个函数签名,Runtime 就会创建一个NSInvocation对象并发送 - forwardInvocation: 消息给目标对象 ==> "面向对象" " 封装 继承 多态 " 1 > "面向对象" 与 "面向过程" > 面向对象和面向过程是编程的两种思考方式. > 面向对象简称OOP,是以事物为中心,参与事件的"事物"是核心,完成事件只是事物的一个小任务."谁 做什么 该谁做 " > 面向过程简称OPP,它是以事件为中心,事件是核心,列出了完成事件的每一个步骤,一步一步完成 "怎么做 1 2 3 4..." > 面向对象侧重于从问题"寻找客体,客体的作用". 面向过程侧重于问题的分解"事件怎么做" 2 > "类和对象" "类" : 类是一组具有相同(特征)属性和行为(功能)的事物的集合(抽象词), 对象是类的具体实现,万物皆是对象, 类就是一种数据类型 它的变量就是对象 (指向该数据类型的指针) "类的定义" : 在OC中类的定义分位两部分 接口和实现 接口: 声明类与父类的名字,方法 实现: 包含了方法的实现,真正意义上定义了类的行为, 3 > "封装" "封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能" "封装就是把客观事物封装成抽象的类,并且类可以吧自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏, 好处 : " 使用更加简单,变量更加安全,可以隐藏内部实现细节, " @private @protected @package @public setter方法: 为外界提供一个设置成员变量值的方法,方法名必须以set开头,一定要接受一个参数,且参数类型要和成员变量保持一致 setter方法的作用: 封装数据,保证数据的安全性,对设置的数据进行过滤 getter方法: 为外界提供一个可以访问该类实例的成员变量的方法, "以 _ 开头的变量都是全局变量 类对象不可以访问实例变量的成员变量 " "属性封装了成员变量,方法封装了具体的实现代码,类封装了属性和方法,子类继承了父类中的方法还可以重写父类的方法" 4 > "继承" 被继承的类成为‘超类‘super class 继承的类是‘子类‘child class 继承: "它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展" 通过继承创建的新类成为‘子类‘或者‘派生类‘ 被继承的类称为‘基类‘,‘父类‘,‘超类‘ 继承关系是"属于关系" 5 > "多态" "允许父类指针指向子类对象" "不同对象以自己的方式响应相同的消息的能力叫做多态" 实现多态的两种方式: "覆盖(override)" 子类重新实现父类的方法 "重载(overload)" 指允许存在多个同名函数(参数列表不同),OC中不可以overload 封装可以隐藏实现细节,使得代码模块化 继承可以扩展已存在的代码模块(类),它们的目的都是为了‘代码重用‘ 多态则是为了实现接口重用,多态的作用就是为了类在继承和派生的时候保证使用‘继承树‘中任意一个类中的实例某一个属性时的正确调用 ==> "分类和协议" 有人也称分类为‘非正式协议‘ ‘分类和协议中不能直接增加成员属性‘ 分类的作用:"在不改变原来类内容的基础上,为类增加一些方法" 1 > 分类中方法的实现可以访问原来类中的成员变量 2 > 分类中可以重新实现原来类中的方法,但是会覆盖原来类中的方法, 3 > 分类中的方法的优先级最高 4 > 可以有无限个分类 ‘协议‘ " protocol " 1 > 协议就一个用途:声明n个方法 不能写实现 2 > 只要某个类遵守了某个协议,就拥有了这个类中的所有的方法 3 > 只要父类遵守了某个协议,那么子类也遵守 4 > protocol中声明的方法可以让任何类去实现, 5 > OC中不支持多继承 ,但是可以遵守多个协议,并且可以添加很多的分类 6 > 基协议: <NSObject>是基协议,是最根本的协议,其中声明了很多最基本的方法 7 > 协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中的方法声明 ==> "block" 简介: 1 > block 是苹果推荐的类型,效率高,在运行时保存代码. ‘用来封装和保存代码‘,有点像函数 2 > block 可以在任何时候执行 可以保存代码, 有返回值, 有形参 , 调用方式和函数类似 3 > block 内部可以访问外部变量, 4 > block 默认情况下不能修改外部的局部变量 5 > 给局部变量加上__block 关键字 这个局部变量就可以在block内部进行修改 6 > 为防止使用block产生循环引用 可以使用 __weak typeof(self) weakSelf = self; 在block中使用weakSelf 代替self ==> __block 做了什么? 可以使用clang -rewrite-objc xxx.m 命令反编写OC代码为CPP代码 __block int b = 10; b 变量 就会被封装成 __Block_byref_b_0 结构体类型 struct __Block_byref_b_0 { void *__isa; //当前对象的指针 __Block_byref_b_0 *__forwarding; //当前这种结构体类型的指针 __forwarding存对象自己地址 "构造方法" int __flags; //标记 int __size; //结构体的大小 int b; //变量 }; ==> ‘寻找方法的过程‘ 1 > 首先把方法包装成为SEL类型的数据 2 > 根据SEL数据找到对应的方法地址 3 > 根据方法地址调用响应的方法 4 > 在上述操作中有缓存,第一次找的时候非常耗费性能,之后便可以直接使用 SEL 就是对方法的一种包装,将方法包装成为一个SEL类型的数据,去寻找对应的方法地址,找到方法地址后就可以调用方法, 发消息就是发送SEL,然后根据SEL找到方法地址,调用方法. ==> " 集合类 " "NSArray" 1 > 创建及初始化 array: 方法: 创建数组 arrayWithArray: 方法: 通过一个数组创建另一个数组 arrayWithContentsOfFile: 方法: 创建数组将内容设置为指定文件内容 arrayWithContentsOfURL: 方法: 创建数组将内容设置为url指定内容 arrayWithObject: 方法: 创建具有一个元素的数组 arrayWithObjects: 方法: 创建具有多个元素的数组 init: 方法: 初始化数组 initWithArray: 方法: 用数组初始化数组 initWithContentsOfFile: 方法: 初始化数组将内容设置为指定文件内容 initWithContentsOfURL: 方法: 初始化数组将内容设置为url指定内容 initWithObjects: 方法: 初始化具有多个元素的数组 2 > 数组元素的操作 containsObject: 方法: 判断数组中是否包含某个元素 count: 方法: 计算元素个数 firstObjectCommonWithArray: 方法: 获取首元素 lastObject: 方法: 获取最后一个元素 objectAtIndex: 方法: 获取在某个位置的数组元素 objectAtIndexs: 方法: 获取数组元素 arrayByAddingObject: 方法: 在数组末尾添加元素 arrayByAddingObjectsFromArray: 方法: 在数组的末尾添加另一个数组 subarrayWithRange: 方法: 数组的一部分创建数组 isEqualToArray: 方法: 比较数组是否相等 indexOfObject: 方法: 返回元素所在的位置 indexOfObjectIdenticalTo: 方法: 返回元素所在的位置 componentsJoinedByString: 方法: 数组转换为字符串 componentsSeparatedByString: 方法: 字符串转换为数组 sortedArrayHint: 方法: 数组转换为数据对象 writeToFile: 方法: 将数组中的内容写入到文件 writeToUrl: 方法: 将数组中的内容写入到url objectEnumerator: 方法: 数组元素从前向后访问 reverseObjectEnumerator: 方法: 数组元素从后向前访问 pathsMatchingExtensions: 方法: 查看某文件夹下的东西 sortedArrayUsingFunction: 方法: 实现数组元素的简单排序 3 > 可变数组 arrayWithCapacity: 方法: 创建一个具有固定长度的可变数组 initWithCapacity: 方法: 初始化一个具有固定长度的可变数组 addObject: 方法: 添加数组元素 addObjectsFromArray: 方法: 用数组创建可变数组 removeObject: 方法: 删除指定的元素 removeAllObjects: 方法: 删除可变数组中的所有元素 removeLastObject: 方法: 删除可变数组中的最后一个元素 removeObjectAtIndex: 方法: 删除指定位置的元素 removeObjectsAtIndex: 方法: 删除可变数组中的元素 removeObjectsInRange: 方法: 删除某个范围内的可变数组中的元素 removeObjectsInArray: 方法: 删除与另一个数组相同的元素 replaceObjectAtIndex: 方法: 替换可变数组中某一位置的元素 replaceObjectsAtIndexes: 方法: 替换可变数组中的多个元素 replaceObjectsInRange: 方法: 替换某一范围的数组元素 insertObject: 方法: 在某一位置插入数组元素 insertObjects: 方法: 在某一位置或范围插入另一数组元素 exchangeObjectAtIndex: 方法: 交换两个元素 setArray: 方法: 设置可变数组中内容 ==> "NSdictionary" 第6章 字典对象(NSDictionary) 1 创建及初始化 dictionary: 方法: 创建字典 dictionaryWithContentsOfFile: 方法: 将创建的字典内容设置为指定文件内容 dictionaryWithContentsOfURL: 方法: 将创建的字典内容设置为指定url内容 dictionaryWithDictionary: 方法: 用字典创建字典 dictionaryWithObject: 方法: 创建具有一个键-值的字典 dictionaryWithObjects: 方法: 创建具有多个键-值的字典 dictionaryWithObjectsAndKeys: 方法: 创建具有多个键-值的字典 init: 方法: 初始化字典 initWithContentsOfFile: 方法: 将初始化的字典内容设置为指定文件内容 initWithContentsOfURL: 方法: 将初始化的字典内容设置为指定url内容 initWithDictionary: 方法: 用字典初始化字典 initWithObjects: 方法: 初始化具有多个键-值的字典 initWithObjectsAndKeys: 方法: 初始化具有多个键-值的字典 2 > 访问键-值 objectForKey: 方法: 返回键的值 allKeys: 方法: 返回所有的键 allValue: 方法: 返回所有的值 allKeysForObject: 方法: 返回值所对应的键 keyEnumerator: 方法: 将字典中所有的键放到NSEnumerator对象中 objectEnumerator: 方法: 将字典中所有的值放到一个NSEnumerator对象中 3 > 文件的处理 fileCreationDate: 方法: 文件创建日期 fileModificationDate: 方法: 文件修改的日期 fileSize: 方法: 文件的大小 fileExtensionHidden: 方法: 扩展名是否隐藏 fileType: 方法: 文件的类型 fileGroupOwnerAccountID: 方法: 文件所属组标识 fileGroupOwnerAccountName: 方法: 文件所属组名 fileHFSCreatorCode: 方法: 文件分层系统创建者编码 fileHFSTypeCode: 方法: 文件分层系统类型编码 fileIsAppendOnly: 方法: 文件是否只读 fileIsImmutable: 方法: 文件是否可变 fileOwnerAccountID: 方法: 文件所属人标识 fileOwnerAccountName: 方法: 文件所属人 filePosixPermissions: 方法: 权限 fileSystemFileNumber: 方法: 文件系统的文件编号 fileSystemNumber: 方法: 文件系统编号 writeToFile: 方法: 字典内容写入文件中 writeToURL: 方法: 字典内容写入url中 4 > 其他 count: 方法: 字典键-值个数 isEqualToDictionary: 方法: 判断字典是否相等 5 > 可变字典 dictionaryWithCapacity: 方法: 创建固定长度的可变字典 initWithCapacity: 方法: 初始化固定长度的可变字典 setObject: 方法: 设置键-值 setDictionary: 方法: 用字典设置可变字典中的内容 removeAllObjects: 方法: 删除所有的内容 removeObjectForKey: 方法: 删除键所对应的值 removeObjectsForKeys: 方法: 删除多个键所有的值 addEntriesFromDictionary: 方法: 将字典中的键-值添加到可变字典中 ==> "NSSet" 1 创建以初始化 set: 方法: 创建集合 setWithArray: 方法: 用数组创建集合 setWithObject: 方法: 创建具有一个元素的集合 setWithObjects: 方法: 创建具有多个元素的集合 setWithSet: 方法: 集合创建集合 init: 方法: 初始化集合 initWithArray: 方法: 用数组初始化集合 initWithObjects: 方法: 初始化具有多个元素的集合 initWithSet: 方法: 集合初始化集合 2 访问元素 objectEnumerator: 方法: 将所有集合中的元素放到NSEnumerator对象中 allObjects: 方法: 返回集合中所有的元素 anyObject: 方法: 返回任意一个元素 count: 方法: 返回元素个数 3 判断比较 containsObject: 方法: 判断集合中是否包含某个元素 member: 方法: 判断集合中是否包含某个元素并返回 isSubsetOfSet: 方法: 判断一个集合是否是一个集合的子集 intersectsSet: 方法: 判断交集 isEqualToSet: 方法: 判断集合是否相等 4 可变集合 setWithCapacity: 方法: 创建具有固定长度的可变集合 initWithCapacity: 方法: 初始化具有固定长度的可变集合 setSet: 方法: 通过集合设置可变集合的内容 addObject: 方法: 添加元素 addObjectsFromArray: 方法: 添加数组中的元素 removeAllObjects: 方法: 删除所有元素 removeObject: 方法: 删除指定的元素 unionSet: 方法: 添加集合元素 minusSet: 方法: 去除另一个集合中的元素 intersectSet: 方法: 做交集 ==> "字符串" 1 > 创建及初始化 string: 方法: 创建字符串 stringWithstring: 方法: 用字符串来创建字符串 stringWithCstring: 方法: 创建C字符串 stringWithFormat: 方法: 创建NSLog()格式的字符串 stringWithContentsOfFile: 方法: 将创建的字符串设置为指定文件的内容 stringWithContentsOfURL: 方法: 将创建字符串设置为url的内容 stringWithUTF8String: 方法: 将创建的字符串转换为UTF8字符串 init: 方法: 初始化字符串 initWithString: 方法: 用字符串来初始化字符串 initWithCString: 方法: 初始化字符串 initWithFormat: 方法: 用NSLog()格式初始化字符串 initWithContentsOfFile: 方法: 将初始化的字符串设置为指定文件的内容 initWithContentsOfURL: 方法: 将初始化的字符串设置为url的内容 initWithUTF8String: 方法: 将初始化的字符串转换为UTF8字符串 2 > 判断和比较 isEqualTostring: 方法: 比较字符串是否相等 hasPrefix: 方法: 判断字符串是否以某个字符开始 hasSuffix: 方法: 判断字符串是否以某个字符结束 compare: 方法: 比较字符串的大小 caseInsensitiveCompare: 方法: 不考虑大小写的比较大小 uppercaseString: 方法: 小写字母转为大写字母 lowercaseString: 方法: 大写字母转为小写字母 capitalizedString: 方法: 将每个单词的首字母大写 3 > 截取 substringToIndex: 方法: 从字符串的开头一直截取到指定的位置 substringFromIndex: 方法: 从指定位置开始截取字符串直到结束 substringWithRange: 方法: 根据指定范围返回子字符串 characterAtIndex: 方法: 返回索引号所在字符串中的字符 4 > 转换类型 doubleValue: / floatValue: 方法: 返回转换为浮点类型的值 intValue: 方法: 返回转换为整型的值 boolValue: 方法: 返回转换为布尔类型的值 5 > 对文件的处理 stringByAppendingPathExtension: 方法: 为文件添加扩展名 pathExtension: 方法: 获取文件扩展名 stringByDeletingPathExtension: 方法: 删除扩展名 writeToFile: 方法: 将字符串写入到文件 writeToURL: 方法: 将字符串写入到url中 stringByExpandingTildeInPath: 方法: 将“~”替换成系统的主目录 stringByAbbreviatingWithTildeInPath: 方法: 将系统主目录替换为“~” lastPathComponent: 方法: 获取路径中的文件名 stringByDeletingLastPathComponent: 方法: 获取路径中文件所在的位置 stringByAppendingPathComponent: 方法: 组合位置和文件名 isAbsolutePath: 方法: 判断绝对路径 6 > 其他 length: 方法: 求字符串的长度 stringByAppendingString: 方法: 字符串后面增加一个新字符串 rangeOfString: 方法: 查找字符串中是否包含其他字符串 stringByTrimmingCharactersInSet: 方法: 去除空格或回车 7 > 可变字符串 (NSMutableString) stringWithCapacity: 方法: 按照固定长度生成空字符串 initWithCapacity: 方法: 初始化一个固定长度的字符串 appendString: 方法: 在字符串的末尾附加另一个字符串 appendFormat: 方法: 附加一个格式化字符串 SetString: 方法: 将字符串设置为规定的内容 insertString: 方法: 在指定位置插入字符串 deleteCharactersInRange: 方法: 删除指定范围的字符串 replaceCharactersInRange: 方法: 使用字符串代替指定范围的字符串 replaceOccurrencesOfString: 方法: 替换 将字符串中的某个字全部替换成别一个字 stringByReplacingOccurrencesOfString: 方法;将字符串中的某个字全部替换成别一个字 ==> "NSFileManager" 1 defaultManger: 方法: 创建文件管理器 2 文件与目录的操作 2.1 createFileAtPath: 方法: 创建文件 2.2 copyItemAtPath: 方法: 复制文件 2.3 moveItemAtPath: 方法: 移动文件 2.4 removeItemFileAtPath: 方法: 删除文件 2.5 attributesOfItemAtPath: 方法: 获取文件的属性 2.6 setAttributes: 方法: 更改属性 2.7 currentDirectoryPath: 方法: 获取当前的目录 2.8 changeCurrentDirectoryPath: 方法: 更改目录 2.9 createDirectoryAtPath: 方法: 创建目录 3 获取文件和目录信息 3.1 contentsAtPath: 方法: 获取文件中的信息 3.2 enumeratorAtPath: 方法: 枚举目录 3.3 contentsOfDirectoryAtPath: 方法: 列举目录 4 判断文件 4.1 fileExistsAtPath: 方法: 判断文件是否存在 4.2 isReadableFile: 方法: 判断是否能进行读取操作 4.3 isWritableFileAtPath: 方法: 判断是否能进行写入操作 4.4 isDeletableFileAtPath: 方法: 判断是否可删除 4.5 isExecutableFileAtPath: 方法: 判断是否可以执行 4.6 contentsEqualAtPath: 方法: 判断是否相等 5 文件读取 5.1 init: 方法: 初始化文件读写对象 5.2 fileHandleForReadingAtPath: 方法: 读取时打开文件 5.3 fileHandleForWritingAtPath: 方法: 写入时打开文件 5.4 fileHandleForUpdatingAtPath: 方法: 更新时打开文件 5.5 writeData: 方法: 数据写入文件 5.6 readDataToEndOfFile: 方法: 读取数据 5.7 readDataOfLength: 方法: 读取固定大小的内容 5.8 offsetInFile: 方法: 获取当前偏移量 5.9 seekToFileOffset: 方法: 设置当前的偏移量 5.10 seekToEndOfFile: 方法: 将偏移量定位到文件尾 5.11 truncateFileAtOffset: 方法: 设置字节 5.12 availableData: 方法: 返回可用数据 5.13 closeFile: 方法: 关闭文件 6 目录工具函数 6.1 NSUserName()函数: 返回登录名 6.2 NSFullUserName()函数: 返回完整用户名 6.3 NSHomeDirectory()函数: 返回路径 6.4 NSHomeDirectoryForUser()函数: 返回用户的主目录 6.5 NSTemporaryDirectory()函数: 返回临时文件的路径目录 ==> "NSDate" 时间和日历(NSDate、NSDateFormatter、NSCalendarDate、NSCalendar、NSTimeZone、NSTimer) 1 时间的创建及初始化 1.1 date: 方法: 创建时间 1.2 dateWithString: 方法: 用字符串创建时间 1.3 dateWithNaturalLanguageString: 方法: 用字符串创建时间 1.4 dateWithTimeInterval: 方法: 用时间间隔创建时间 1.5 dateWithTimeIntervalSince1970: 方法: 用时间间隔创建时间 1.6 dateWithTimeIntervalSinceNow: 方法: 用时间间隔创建时间 1.7 dateWithTimeIntervalSinceReferenceDate: 方法: 用时间间隔创建时间 1.8 init: 方法: 初始化时间 1.9 initWithString: 方法: 用字符串初始化时间 1.10 initWithTimeInterval: 方法: 用时间间隔初始化时间 1.11 initWithTimeIntervalSince1970: 方法: 用时间间隔初始化时间 1.12 initWithTimeIntervalSinceNow: 方法: 用时间间隔初始化时间 1.13 initWithTimeIntervalSinceReferenceDate: 方法: 用时间间隔初始化时间 2 时间的比较 2.1 isEqualToDate: 方法: 比较是否相等 2.2 compare: 方法: 比较时间 2.3 earlierDate: 方法: 比较哪个时间早 2.4 laterDate: 方法: 比较哪个时间晚 3 获取时间 3.1 dateByAddingTimeInterval: 方法: 获取经过时间间隔后的时间 3.2 distantPast: 方法: 获取过去的时间 3.3 distantFuture: 方法: 获取将来的时间 3.4 timeIntervalSinceDate: 方法: 获取两时间的差值 3.5 timeIntervalSinceNow: 方法: 获取两时间的差值 3.6 timeIntervalSince1970: 方法: 获取两时间的差值 3.7 timeIntervalSinceReferenceDate: 方法: 获取两时间的差值 4 时间和字符串的相互转换 4.1 init: 方法: 初始化用于时间转换的对象 4.2 setDateFormat: 方法: 设置格式 4.3 initWithDateFormat: 方法: 初始化用于时间转换的对象 5 日历时间的创建及初始化 5.1 calendarDate: 方法: 创建日历时间 5.2 dateWithYear: 方法: 创建日历时间并设置内容 5.3 dateWithString: 方法: 创建日历时间并设置内容及格式 5.4 init: 方法: 初始化日历时间 5.5 initWithYear: 方法: 初始化日历时间并设置内容 5.6 initWithString: 方法: 初始化日历时间并设置内容及格式 6 获取日历时间信息 6.1 dayOfWeek: 方法: 获取天数 6.2 dayOfMonth: 方法: 获取天数 6.3 dayOfYear: 方法: 获取天数 6.4 hourOfDay: 方法: 获取时间 6.5 minuteOfHour: 方法: 获取时间 6.6 secondOfMinute: 方法: 获取时间 6.7 monthOfYear: 方法: 获取时间 6.8 yearOfCommonEra: 方法: 获取年 6.9 dayOfCommonEra: 方法: 获取天数 6.10 calendarFormat: 方法: 获取日历的格式 6.11 timeZone: 方法: 获取时区 6.12 dateByAddingYears: 方法: 获取日期时间 7 设置日历时间 7.1 setCalendarFormat: 方法: 设置日历的格式 7.2 setTimeZone: 方法: 设置时区 8 日历的使用 8.1 currentCalendar: 方法: 创建日历 8.2 autoupdatingCurrentCalendar: 方法: 获取日历 8.3 initWithCalendarIdentifier: 方法: 初始化日历 8.4 local: 方法: 获取区域 8.5 firstWeekday: 方法: 获取每周的第一天 8.6 minimumDaysInFirstWeek: 方法: 获取天数 8.7 calendarIdentifier: 方法: 获取日历 8.8 setFirstWeekday: 方法: 设置每周的第一天 8.9 setMinimumDaysInFirstWeek: 方法: 设置天数 9 时区的使用 9.1 timeZoneWithName: 方法: 用已知时区创建时区 9.2 timeZoneWithAbbreviation: 方法: 用已知时区创建时区 9.3 timeZoneForSecondsFromGMT: 方法: 用偏移创建时区 9.4 initWithName: 方法: 用已知时区初始化时区 9.5 systemTimeZone: 方法: 获取系统的时区 9.6 localTimeZone: 方法: 获取本地时区 9.7 knownTimeZoneNames: 方法: 返回所有时区 9.8 name: 方法: 获取名称 9.9 abbreviation: 方法: 获取缩写 9.10 secondsFromGMT: 方法: 获取秒数 10 定时器的使用 10.1 timerWithTimeInterval: 方法: 创建定时器 10.2 initWithFireDate: 方法: 初始化定时器 10.3 setFireDate: 方法: 设置时间 10.4 fireDate: 方法: 返回时间 10.5 invalidate: 方法: 使定时器无效 10.6 isValid: 方法: 判断是否有效 ==> "线程 进程 锁" 进程、线程、锁(NSProcessInfo、NSThread、NSLock) 1 使用进程 1.1 processInfo: 方法: 创建进程 1.2 init: 方法: 初始化进程 1.3 processName: 方法: 获取进程的名称 1.4 environment: 方法: 获取变量/值 1.5 globallyUniqueString: 方法: 生成字符串 1.6 operatingSystem: 方法: 获取操作系统信息 1.7 operatingSystemName: 方法: 获取操作系统的名称 1.8 operatingSystemVersionString: 方法: 获取操作系统的版本信息 1.9 processIdentifier: 方法: 获取进程的标识符 1.10 arguments: 方法: 获取进程的参数 1.11 hostName: 方法: 获取主机名称 1.12 setProcessName: 方法: 设置进程的名称 1.13 processorCount: 方法: 获取CPU的数目 2 线程的创建及初始化 2.1 detachNewThreadSelector: 方法: 创建线程 2.2 init: 方法: 初始化线程 2.3 initWithTarget: 方法: 初始化线程 3 执行线程 3.1 start: 方法: 开启线程 3.2 cancel: 方法: 取消线程 3.3 exit: 方法: 结束线程 4 获取与设置线程 4.1 currentThread: 方法: 获取当前线程 4.2 threadPriority: 方法: 获取属性值 4.3 setThreadPriority: 方法: 设置属性值 4.4 name: 方法: 获取名称 4.5 setName: 方法: 设置名称 4.6 stackSize: 方法: 获取堆栈 4.7 setStackSize: 方法: 设置堆栈 5 判断线程 5.1 isMultiThreaded: 方法: 判断线程是否为主线程 5.2 isExecuting: 方法: 判断线程是否在执行 5.3 isCancelled: 方法: 判断线程是否取消 5.4 isFinished: 方法: 判断线程是否结束 6 使用互斥锁 6.1 lock: 方法: 调用锁 6.2 unlock: 方法: 关闭锁 6.3 trylock: 方法: 锁定锁 6.4 lockBeforeDate: 方法: 在一定时间内获取锁 7 使用递归锁 7.1 lock: 方法: 调用锁 7.2 unlock: 方法: 关闭锁 7.3 tryLock: 方法: 获取锁 7.4 lockBeforeDate: 方法: 在一定时间内获取锁 8 使用条件锁 8.1 initWithCondition: 方法: 初始化条件锁 8.2 condition: 方法: 获取条件 8.3 lockWhenCondition: 方法: 在条件允许下调用锁 8.4 unlockWithCondition: 方法: 在条件允许下关闭锁 8.5 tryLockWhenCondition: 方法: 在条件允许下获取锁 8.6 lockWhenCondition: 方法: 在条件和时间允许下获取锁 8.7 tryLock: 方法: 获取锁 8.8 lockBeforeDate: 方法: 在一定时间下获取锁 8.9 lock: 方法: 调用锁 8.10 unlock: 方法: 关闭锁
时间: 2024-10-25 01:47:49