【WIP】Objective-C Foundation框架的主要对象

创建: 2018/02/02

完成字符串: 2018/02/05

 

任务表: TODO

 

最新内容确认: 字符串数据类, 数组类

 可变与不变的对象
 一览

 

 种类  不变类  可变类
 数组  NSArray  NSMutableArray
 数据data  NSData  NSMutableData
 字典(哈希表)  NSDictionary  NSMutableDictionary
 集合  NSSet  NSMutableSet
 字符串  NSString  NSMutableString
 带属性的字符串  NSAttributedString  NSMutableAttributedString
 文字集合  NSCharacterSet  NSMutableCharacterSet
 索引集合  NSIndexSet  NSMutableIndexSet

可变类是不变类的子类,继承可变类的所有方法

 从不变类生成可变类

 - (id) mutableCopy;

 定义于NSObject

Sample *test = [[Sample alloc] init];
MutableSample *temp = [test mutableCopy];

 

   
 字符串类
 简介

 字符码: Unicode 

 NSString 生成了无法更改

 Foundation/NSString.h

 NSString主要方法

 

(1)

Unicode字符串的操作

注: unichar是Unicode表现的一个字符的类型,不同于char

      便利构造函数: 先自动呼出alloc的

 

 - (id) initWithUTF8String: (const char*) bytes;

 便利构造函数: 

 + (id) stringWithUTF8String: (const char*) bytes;

 用和C一样以'\0'结尾的字符串生成
 - (__strong const char *) UTF8String;  返回编码为UTF-8的C字符串指针
 - (NSUInteger) length;

 返回字符串长度

 不同于C,不能用来计算需要的大小

 (# TODO: check [?])

 - (unichar) characterAtIndex: (NSUInteger) index;  获取第index个的Unicode字符

 - (id) initWithCharacters: (const unichar *) characters length: (NSUInteger) length

 便利构造函数: 

 + (id) stringWithCharacters: length:

 生成length长的以characters重复的字符串
 - (void) getCharacters: (unichar *) buffer range: (NSRange) aRange

 把aRange指定的范围的字符串复制到buffer

 注: 不会自动加'\0'

      NSRange 开始位置和长度的结构体

      buffer长度必须够

   

 

(2)

 指定字符编码的变换

  

 

 NSStringEncoding类型

 指定字符码

 如

  

 NSASCIIStringEncoding

 7位的ASCII字码

 NSUTF8StringEncoding

 Unicode字符的8位字码

 UTF-8

 NSMaxOsRomanStringEncoding

 日语的8位EUC字码
 NSShiftJISStringEncoding  日语的8位shiftJIS字码
   

 

 - (id) initWithCString: (const char *) nullTerminatedCString

                     encoding: (NSStringEncoding) encoding

 便利构造函数:

 + (id) stringWithCString: encoding:

注: encoding表示data的生成方法,生成的对象的生成方法是Unicode

 通过指定编码的以'\0'结尾的字符串生成

 - (__strong const char *) cStringUsingEncoding: (NSStringEncoding) encoding

 指定字码来转换,无法转换会抛出例外

 getCString:MaxLength:encoding: 可以直接放到准备好的内存里

 - (id) initWithData: (NSData *) data encoding: (NSStringEncoding) encoding

注: encoding表示data的生成方法,生成的对象的生成方法是Unicode

 通过以encoding字码写的data来生成 

 类似的有

 initWithBytes:length:encoding:

 - (NSData *) dataUsingEncoding: (NSStringEncoding) encoding

只获取长度:

lengthOfBytesUsingEncoding:

 把受体的字符串通过encoding编码后返回NSData,

 无法转换返回nil

 

 - (BOOL) canBeConvertedToEncoding: (NSStringEncoding) encoding

 能不能被指定的字码转换

可以用

 availableStringEncodings来查看当前环境可用的encoding

URL字符化

 - (NSString *) stringByAddingPercentEscapesUsingEncoding: (NSStringEncoding) encoding

String化

 stringByReplacingPercentEscapesUsingEncoding:

 把受体根据encoding来%化,用在URL的字符串表达上

 都在Foundation/NSURL.h

   

 

(3)

 根据格式生成字符串

 

 格式规则

 格式规则和printf()里的一样

 不同:

 

   可用%@, NSString, 对象的description(NSString)

   格式字符串也是NSString

 注意: 用格式生成NSString时,格式修饰符的对象不会自动转型

 

 - (id) initWithFormat: (NSString *) format, ...

 便利构造函数:

 stringWithFormat:

 根据格式生成字符串

 可变长度的参数, 最后加...

# TODO: Supply [10.2 可变长度的参数]

   

 

(4)

 对比

 

 

 NSComparisionResult  
enum _NSComparisionResult {
  NSOrderedAscending = -1, NSOrderedSame, NSOrderedDescending
};

typedef NSInteger NSComparisionResult;

相同返回NSOrderedSame, 小返回NSOrderedDescending, 大返回NSOrderedAscending

 - (NSComparisionResult) compare: (NSString *) aString 

 字符串的比较, aString不能为nil

 只是比较是否相同的话可用

 - (BOOL) isEqualToString: (NSString *) aString

 - (NSComparisionResult) caseInsensitiveCompare: (NSString *) aString

无视大小写的比较

其他方法来比较的话用:compare:option: 

 - (NSComparisionResult) localizedStandardCompare: (NSString *) aString  Mac的Finder里文件名排序相同的方法来比较
 - (BOOL) isEqualToString: (NSString *) aString  与指定NSString是否相同

 - (BOOL) hasPrefix: (NSString *) aString

 开头是否和aString相同(是否有指定前缀)
 - (BOOL) hasSuffix: (NSString *) aString  结尾是否与aString相同
 commonPrefixWithString:options:  从开头取出相同的字符串
   
   

 

(5)

 连接

 

 - (NSString *) stringByAppendingString: (NSString *) astring  把aString连接在最后
 - (NSString *) stringByAppendingFormat: (NSString *) format, ...  把根据格式生成的字符串连接在最后
   
   

 

(6)

 子字符串

  😂Objective-C都tm什么鬼,怎么啥都给命个怪名啊😂我他娘的意大利炮呢😂

 - (NSString *) substringToIndex: (NSUInteger) anIndex  获取从开头到anIndex-1位置的字符串
 - (NSString *) substringFromIndex: (NSUInteger) anIndex  获取从anIndex到结尾的字符串
 - (NSString *) substringWithRange: (NSRange) aRange  获取aRange指定范围的字符串
 NSRange的说明  
typedef struct _NSRange {
    NSUInteger location; // 开头
    NSUInteger length; //长度
} NSRange;

 

   

 

(7)

 搜索与置换

  

 - (NSRange) rangeOfString: (NSString *) aString

 搜索指定字符串在受体内的位置

 不存在的话返回的location是NSNotFound, length为0

 忽视大小写等用

 rangeOfString:options:

 搜索时支持正规表现, option: NSRegularExperssionSearch

 

[str rangeOfString: @"[0-9]{3}+-[0-9]{4}" option: NSRegularExpressionSearch];

 

 - (NSRange) lineRangeForRange: (NSRange) aRange

 指定行与位置,返回实际在字符串里的位置

 @"第1行\n第2行\n第3行\n第4行\n"这样的

代表行的结尾的字符

 

\r或0x0d CR, Mac OS的行末
\n或0x0a LF, Unix类的行末
\r\n CRLF, Windows的行末
U+2028 Unicode的行末
U+2019 Unicode的段落结尾
   

 

 - (NSString *) stringByReplacingCharactersInRange: (NSRange) range withString: (NSString *) replacement  指定范围的字符用replacement来代替
 - (NSString *) stringByReplacingOccurencesOfString: (NSString *) target withString: (NSString *) replacement  用replacement替代所有的target
   
   
   
   
   
   

 

(8)

 大小写

  

- (NSString *) lowercaseString  全大写
- (NSString *) uppercaseString  全小写
- (NSString *) capitalizedString  首字母大写,其他小写
   

 

(9)

 数值的转换

 doubleValue

 floatValue

 intValue

 integerValue

 boolValue      以Y, y, T, t开头或开头是非零数字(001, 1, 010都算非零数字)的返回YES

(10)

 路径的操作

 位置 Foundation/NSPathUtilities.h

 参照根路径 NSHomeDirectory() 

 

 例: /github/mySample/math.m

 

 - (NSString *) lastPathComponent

 获取最后一个路径元素

 例子里的math.m

 - (NSString *) stringByAppendingPathComponent: (NSString *) aStr  在最后添加指定的路径元素
 - (NSString *) stringByDeletingLastPathComponent

 删除最后一个路径元素

 如果删除后是根路径,删除多余的'/'

 - (NSString *) pathExtension

 获取文件后缀,没有后缀的返回空字符串

 例里的"m"

 - (NSString *) stringByAppendingPathExtension: (NSString *) aStr

 在最后增加文加后缀

 不要'.', 自动添加

 - (NSString *) stringByDeletingPathExtension

 删除后缀与'.'

 没有后缀的不改动

 - (BOOL) isAbsolutePath  如果是绝对路径返回YES
 + (NSString *) pathWithComponents: (NSArray *) components

 以数组元素来创建路径

 要绝对路径的话第一个元素 @"\"

 末尾加\的话最后一个元素 @""

 - (NSArray *) pathComponents

 把路径分解成路径元素的数组

 绝对路径第一个 @"\"

 最后带\的最后一个@""

 - (NSString *) stringByExpandingTildeInPath

 开头是~/...或者~name/...的,把第一个/前换成根路径

 不是的不变

 - (NSString *) stringByAbbreviatingWithTildeInPath  开头是根路径的换成~

 - (__strong const char *) fileSystemRepresentation

放入aStr内: 

 - (BOOL) getFileSystemRepresentation:maxLength:

 用文件系统使用的字码来转换成C字符串

   
   
   

 

(11)

文件的输入输出 

 

# TODO: Supply [s18 NSError]

 - (id) initWithContentsOfFile: (NSString *) path

          encoding: (NSStringEncoding) enc

            error: (NSError **)error

 便利的构造函数:

 stringWithContentsOfFile:encoding:error:

 从指定的path以enc字码读取文件并写入受体

 如果无法读取, 释放受体返回nil, error指向详细信息

 - (id) initWithContentsOfFile: (NSString *) path

        usedEncoding: (NSStringEncoding) enc

            error: (NSError **) error

 和上一个一样,但是字码自动判定并且放入enc里 

 - (BOOL) writeToFile: (NSString *) path

      atomically: (BOOL) useAuxiliaryFile

                   encoding: (NSStringEncoding) enc

          error: (NSError **) error

 把受体按enc转码写入path指定的文件里, 成功返回YES

 atomically为YES的话,写在临时文件写入,成功后重命名为原文件,

 不损坏原文件

 

失败的话返回NO, error指向错误详细信息

   
   
   
   
   
   
   

 

(12)

其他 

 

 

 - (id) init

 便利的构造函数:

 string

 生成空字符串

 用在NSMutableString才有实际意义(因为NSString一旦生成不能改变)

- (id) initWithString: (NSString *) aString 

 根据aString生成字符串

 参数也可以是NSMutableString的实例, 可变生成不变

- (NSString *) description

 NSObject处定义

 NSString处为返回self, 也就是自己的字符串

- (id) propertyList  

# TODO: Supply [s13-3 propertyList]

- (NSArray *) componentsSeparatedByCharactersInSet: 

 (NSCharacterSet *) sep

 以sep指定的字符集合内部的字符为分割符分割字符串并返回数组
   
   
   
   
   

 

   
   
   
   
   

 

 

 NSMutableString 

 NSString的子类

 

生成

 

 

 - (id) initWithCapacity: (NSUInteger) capacity

 便利的构造函数:

 stringWithCapacity:

 指定容量

 容量不够了会自动增加,所以不用严密的值

   
   
   

 

 修改

 

 - (void) appendString: (NSString *) aString  在末尾插入aString
 - (void) appendFormat: (NSString *) format, ...  根据格式生成字符串并插入在最后

 - (void) insertString: (NSString *) aString

       atIndex: (NSUInteger) loc

 把aString插入到loc位置
 - (void) deleteCharactersInRange: (NSRange) aRange  删除aRange指定范围的字符串
 - (void) setString: (NSString *) aString  复制aString

 - (void) replaceCharactersInRange: (NSRange) aRange

              withString: (NSString *) aString

 用aString替换aRange指定范围的字符串

 - (NSUInteger) replaceOccurencesOfString: (NSString *) target

                  withString: (NSString *) replacement

                    options: (NSStringComparisionOptions) opts

                    range: (NSRange) searchRange

 searchRange范围内所有target都用replacement来替换

 options可以指定NSRegularExperssionSearch来使用正则表达式

   
   
   

 

   
   
   
   
   
   
   
   

 

   
   
   
   
   
   
   
 数据类 
 简介

 处理比特列

 Foundation/NSData.h 

 (1)

 生成

 

 - (id) initWithBytes: (const void *) bytes length: (NSUInteger) length

 便利的构造函数:

 dataWithBytes:length:

 以bytes为起点长度length的数据来初始化

 是copy,不是原来对象

 - (id) initWithBytesNoCopy: (void *) bytes

            length: (unsigned) length

       freeWhenDone: (BOOL) flag

 便利的构造函数:

 dataWithBytesNoCopy:length:freeWhenDone:

 以bytes为起点长度length的数据来初始化 

 不是copy,是原来对象

 flag: YES 自动释放, bytes必须有malloc等生成

         NO 手动释放

 - (id) initWithData: (NSData *) aData

 便利的构造函数:

 dataWithData:

 从aData生成

 aData可以使NSMutableData的实例, 从可变生成不变

 + (id) data

 相当于 [[NSData alloc] init];

 生成长度0的空的NSData实例

 主要用于NSMutableData, 对应init

   

 

 (2)

 获取

  

 - (NSUInteger) length  获取比特列长度
 - (const void *) bytes  获取比特列开头的指针

 - (void) getBytes: (void *) buffer length: (NSUInteger) length

 获取开头开始长度length的比特列

 - (NSData *) subdataWithRange: (NSRange) range

 - (void) getBytes: (void) buffer range: (NSRange) range

 获取range范围的数据

 把range范围的数据写入buffer

 - (NSRange) rangeOfData: (NSData *) dataToFind

             options: (NSDataSearchOptions) mask

           range: (NSRange) searchRange

 在searchRange范围内寻找dataToFind,找到

 返回NSRange类数据。

 NSDataSearchOptions可以指定逆序查找等

 dataToFind不可以是nil

   
   
   

 

 (3)

 比较 

 

 - (BOOL) isEqualToData: (id) anObject  受体的data和anObject内容一致,长度一致时返回YES
   

 

 (4)

 文件输入输出 

  

 - (NSString *) description  把data的内容以property list形式生成字符串并返回

 - (id) initWithContentsOfFile: (NSString *) path

            options: (NSUInteger) mask

               error: (NSError **) errorPtr

 便利的构造函数:

 dataWithContentsOfFile:options:error:

 读取path文件,作为比特列来初始化

 失败的话受体自动释放,变成nil, errorPtr装入详细错误信息

 mask: 是否使用虚拟内存等? # TODO: check [mask内容?]

 - (id) initWithContentsOfFile: (NSString *) path

 便利的构造函数:

 dataWithContensOfFile:

 上一个的第二,三参数自动指定为0, NULL

 - (BOOL) writeToFile: (NSString *) path

                atomically: (BOOL) flag

 把受体的比特列写入path指定的文件里,成功返回YES

 flag: YES 写入在临时文件,成功后重命名为指定文件 (失败不影响原文件)  

   
   
   
   
   
   

 

NSMutableData 

 NSData的子类

 Foundation/NSData.h

 (1)

 生成

 

 - (id) initWithCapacity: (NSUInteger) capacity

 便利的构造函数:

 dataWithCapacity

 指定容量来生成, 不够了自动增加

 也可以直接init, 也就是容量为0

 - (id) initWithLength: (NSUInteger) capacity

 便利的构造函数:

 dataWithLength:

 指定比特列长度来生成, 全部比特位用0来填
   
   
   

 

 (2)

 获取

 

 - (void *) mutableBytes

 获取比特列

 长度为0时返回NULL

 和bytes的不同在于获取的比特列可以被改写

   
   

 

 (3)

 增加

  

 - (void) appendData: (NSData *) otherData  在受体的比特列末尾添加上otherData(copy)

 - (void) appendBytes: (const void *) bytes

         length: (NSUInteger) length

 复制bytes开头到指定长度的比特列到受体末尾

 # TODO: check [长度超过bytes时候是什么处理]

   

 

 (4)

 变更

 

 - (void) replaceByBytesInRange: (NSRange) range

            withBytes: (const void *) replacementBytes

               length: (NSUInteger) replacementLength

 用replacementBytes替换range指定的范围

 replacementLength是替换的新字符串的长度

 range的长度和replacementLength不同的话,比特列长度自动变化。

 range的长度为0时为location后插入

 - (void) replaceBytesInRange: (NSRange) range

                             withBytes: (const void *) bytes

  用bytes替换range指定范围的数据

 相当于上一个的replacementLength和range的length相同的情况

 - (void) setData: (NSData *) aData  用aData的内容设置受体
 - (void) resetBytesInRange: (NSRange) range  用0重置指定范围的比特列
   

 

 (5)

 改变比特列长度

 

 - (void) increaseLengthBy: (NSUInteger) extraLength

 增加指定长度

 增加部分都自动用0填埋

 - (void) setLength: (NSUInteger) length

 设定比特列长度为length

 拉伸的时候,增加部分自动用0填埋

   

 

 

   
   
   
   
 数组类 
 NSArray

  

 简介

 数组元素可以是不同的类的实例,不能有nil

 Foundation/NSArray.h

 (1)

 生成与初始化

  

 + (id) array

 对应init

 生成空数组

 NSMutableArray才有用

 + (id) arrayWithObject: (id) anObject  生成包含参数指定的一个元素的数组

 - (id) initWithObjects: (id) firstObj, ...

 便利的构造函数:

 arrayWithObjects:

 生成以参数指定的对象为元素的 数组

 参数最后要有nil, xcode里自动添加了

 - (id) initWithObjects: (const id *) objects

          count: (NSUInteger) count

 便利的构造函数:

 arrayWithObjects:count:

 以count个objects来生成数组

 object: 包含对象的数组,可以使C语言的数组

 - (id) initWithArray: (NSArray *) anArray

 便利的构造函数:

 arrayWithArray:

 用NSArray或NSMutableArray来生成

 可以用可变生成不变

 - (id) initWithArray: (NSArray *) array

              coptItems: (BOOL) flag

 和上一个一样

 flag: YES array的copy来生成

         NO array的指针来生成

   
   
   
   

 

 (2)

 获取

 

 - (NSUInteger0 count  数组的长度
 - (NSUInteger) indexOfObject: (id) anObject

 返回指定元素的位置

 不存在的话返回NSNotFound

#define NSIntegerMax LONG_MAX

static const NSInteger NSNotFound = NSIntegerMax;

 

 - (BOOL) containsObject: (id) anObject  判断是否包含指定的元素
 - (id) ObjectAtIndex: (NSUInteger) index 

 获取指定位置的元素

 index大于长度的话返回NSRangeException 

 - (id) lastObject

 返回最后一个元素

 空的话返回nil 

 - (id) getObjects: (id __unsafe_unretained []) aBuffer

         range: (NSRange) aRange

 复制aRange指定范围的数组到aBuffer 

 aBuffer必须容量够

 - (id) subarrayWithRange: (NSRange) range  获取指定范围的数组
   
   
   

 

 (3)

 比较

  

 - (BOOL) isEqualToArray: (id) anObject

 判断参数与受体是否相等

 相等的定义: 数组长度相同, 相同位置的元素相同

 - (id) firstObjectCommonWithArray: (NSArray *) otherArray  返回受体与otherArray里第一个共通的元素
   

 

 (4)

 增加

 

 - (NSArray *) arrayByAddingObject: (id) anObject  在末尾增加指定的一个元素
 - (NSArray *) arrayByAddingObjectsFromArray: (NSArray *) anArray  在末尾增加指定的数组
   

 

 (5)

 排序

 

 - (NSArray *) sortedArrayUsingSelector: (SEL) comparator

NSArray *arrayA = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", nil];

NSArray *arrayB = [arrayA sortedArrayUsingSelector: @(compare:)];

 

 返回按升顺(从小到大)排列的数组

 用选择器比较

 comparator的结果必须是NSComparisionResult型

 - (NSArray *) sortedArrayUsingFunction: (NSInteger(*)(id, id, void *)) comparator

                  context: (void *) context

 比较用的函数形式: NSInteger funcName(id arg1, id arg2, void *context);

 context相当于option, 如果不知道什么鬼,可以直接给nil(反正函数也是自定义的)

 返回按升顺(从小到大)排列的数组

 用函数比较, 函数形式

 NSInteger funcName(id arg1, id arg2, void *context); 

 

   

 

 (6)

 对元素发送信息

 从头到位一个一个发送,至于发送的消息是否会改变整个数组,无法保证

 - (void) makeObjectsPerformSelector: (SEL) aSelector

 向所有元素发送aSelector 

 aSelector不能有参数

 - (void) makeObjectsPerformSelector: (SEL) aSelector

                 withObject: (id) anObject

 向所有元素发送aSelector  

 aSelector必须只有一个id型参数

   

 

 (7)

 文件输入输出

 以property list形式进行  

 # TODO: check [property list]

 - (NSString *) description

 向每一个元素发送discription获得的内容以,分隔的字符串

 例: (s1, s2, s3, s4)

 - (NSString *) componentsJoinedByString: (NSString *) separator

 用separator为分隔符号,其他和description一样

 例: (s1 | s2 | s3 | s4)

 - (id) initWithContentsOfFile: (NSString *) aPath

 便利的构造函数:

 arrayWithContentsOfFile:

 读取以property list形式保存的文件内容

 生成数组

 - (BOOL) writeToFile: (NSString *) path

                atomically: (BOOL) flag

 以property list形式写入文件

 atomically: YES 失败不会损坏原文件

 - (NSArray *) pathsMatchingExtensions: (NSArray *) filterTypes

 受体是文件名,参数是文件后缀的数组

 取出filterTypes里包含的后缀的文件名,构成数组

   

 

   
   

 

 NSMutableArray

 NSArray的子类

 Foundation/NSArray.h  

 (1)

 生成与初始化

 

 - (id) initWithCapacity: (NSUInteger) numItems

 便利的构造函数:

 arrayWithCapacity:

 生成指定容量的数组, 不够的话自动增加

 生成空数组的话- (id) init或者 + (id) array

   

 (2)

 增加与置换元素

 

 - (void) addObject: (id) anObject

 在末尾增加anObject

 参数不能是nil

 - (void) addObjectsFromArray: (NSArray *) otherArray  在末尾增加指定的数组

 - (void) insertObject: (id) anObject

        atIndex: (NSUInteger) index

 在指定位置插入元素

 index必须在有效范围内

 index指的是插入后该元素的位置

 - (void) replaceObjectAtIndex: (NSUInteger) index

          withObject: (id) anObject

 用指定元素替换指定位置的元素

 anObject不能为nil

 - (void) setArray: (NSArray *) otherArray  删除自身所有元素,用otherArray设定自己

 - (void) exchangeObjectAtIndex: (NSUInteger) idx1

          withObjectAtIndex: (NSUInteger) idx2

 互换idx1和idx2位置的元素

   

 

 (3)

 删除

 

 - (void) removeAllObjects  删除所有元素
 - (void) removeLastObject  删除最后的元素
 - (void) removeObjcetAtIndex: (NSUInteger) index  删除指定位置的元素
 - (void) removeObjectsInRange: (NSRange) aRange  删除指定范围的元素
 - (void) removeObject: (id) anObject

 删除与anObject相同的所有元素

 相同: isEuqal: 返回YES

 - (void) removeObjectsInArray: (NSArray *) otherArray  删除otherArray里包含的元素
   

 

 (4)

 排序

 

 - (void) sortUsingSelector: (SEL) comparator

 按升顺(从小到大)排列数组

 用选择器比较 例:@selecter(a:b:c:)

 comparator的结果必须是NSComparisionResult型

 - (void) sortUsingFunction: (NSInteger (*) (id, id, void *)) compare

             context: (void *) context

按升顺(从小到大)排列数组

 用函数比较, 函数形式

 NSInteger funcName(id arg1, id arg2, void *context); 

   
   
   

 

   
   

 

 高速枚举

 范例

for (id x in group) { ... } 
id obj; // 也可以在外面声明
for (obj in group) { // for...in
    ...
}

for (id sample in group) { //这样的sample只在循环时有效
    ...
}

 

注意: group可不可变无所谓,但是如果不可变,循环内部不可以变更(变更的话会抛出例外)

    数组的话从头到尾的顺序取出

     集合的话按内部逻辑(也就是不确定)

     哈希表的话顺序也是按内部逻辑, 取出的是哈希值 

 枚举器

 NSEnumerator

 Foundation/NSEnumerator.h

 都用for...in好了。。。这个无视

 

 - (id) nextObject

 下一个元素

 没有下一个的话返回nil

 - (NSArray *) allObjects

 获取还没有拿出来的元素的数组

 有一部分列举器没有这个方法

 - (NSEnumerator *) objectEnumerator  获取按顺序循环的列举器
 - (NSEnumerator *) reverseObjectEnumerator  获取按逆序循环的列举器
   
   
   
   
   
   

 

 高速枚举与枚举器  忽视 p242

 NSSet

 集合类

 Foundation/NSSet.h

 和数组相同的很多

 + (id) set

 对应 [[NSSet alloc] init];

 生成空集合

 - (id) initWithArray: (NSArray *) array

 便利的构造函数: 

 setWithArray:

 用数组来生成集合

 其他省略

 - (NSUInteger) count  获取元素数量
 - (NSArray *) allObjects  把所有元素合成数组
 - (BOOL) containsObject: (id) anObject  是否包含指定的元素
 - (BOOL) isEqualToSet: (NSSet *) otherSet  是否和指定集合相等
 - (B00L) isSubsetOFSet: (NSSet *) otherSet  是否是指定集合的子集
 - (BOOL) intersectsSet: (NSSet *) otherSet  是否和指定集合有交集
   

 

 NSMutableSet

 

 

 - (id) initWithCapacity: (NSUInteger) numItems

 便利的构造函数:

 setWithCapacity:

 指定容量初始化

 不够了会自动增加

 - (void) addObject: (id) anObject  增加指定元素
 - (void) removeObject: (id) anObject  删除指定元素

 - (void) unionSet: (NSSet *) otherSet

 - (void) intersectSet: (NSSet *) otherSet

 - (void) minusSet: (NSSet *) otherSet

 生成并集

 生成交集

 生成取出共有部分的集合

   

 

   
   
   
 词典类(哈希表类) 
   
   
   
   
   
   
   
   
   
   
 对数值的wrapper class
   
   
   
   
   
   
   
   
   
   
 NSURL 
   
   
   
   
   
   
   
   
   
   
posted @ 2018-02-02 14:21  懒虫哥哥  阅读(162)  评论(0编辑  收藏  举报