字符串(NSString与NSMutableString)
创建字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
NSString的常用功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
可变字符串(NSMutableString)
NSString对象的字符序列是不可更改的,直至对象被销毁,与NSString对象不同的是,NSMutableString对象则代表一个字符序列可变的字符串,而且NSMutableString是NSString得子类,这代表NSString的所有方法,NSMutableString也是可用的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
时间与日期
日期与时间(NSDate)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
日期格式器(NSDateFormatter)
NSDateFormatter用于完成NSDate与NSString之间的转换。
NSDateFormatterNoStyle: 不显示日期、时间的风格
NSDateFormatterShortStyle: 显示短的日期、时间风格
90-1-1 上午8:00
NSDateFormatterMediumStyle: 显示中等的日期、时间风格
1990-1-16
NSDateFormatterLongStyle: 显示肠的日期、时间风格
1990年1月16日 GMT+0800 上午8时00分00秒
NSDateFormatterFullStyle: 显示完整的日期、时间风格
1990年1月16日 星期二 中国标准时间 上午 8时00分00秒
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
日历(NSCalendar)与日期组件(NSDateComponents)
NSDateComponents可以将个时间字段分别设置、获取,NSDate则是将各时间字段整合为一个整体,NSCalendar主要用于实现两者之间的转换,主要用以下两个方法来实现:
(NSDateComponents*)components:fromDate: 从NSDate对象提取年月日时分秒个时间字段信息
dateFromComponents:(NSDateComponents*) comps: 使用comps对象包含的年月日时分秒个时间字段信息来创建NSDate
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
定时器(NSTimer)
创建NSTimer对象用可用以下两种方法:
scheduledTimerWithTimeInterval:invocation:repeats:
scheduleTimerWithTimeInterval:target:SELECTor:userInfo:repeat:
参数作用
timeInterval::指定每隔多少秒执行一次任务
invocation或 target &SELECTor:指定重复执行的任务。
userInfo:额外的附加信息
repeat:指定一个BOOL值,控制是否需要重复执行任务
1 2 |
|
上面代码中指定以当前对象的 info: 方法作为任务执行体,因此,程序还需要在该类中定义一个 info: 方法,该方法可定义一个 NSTimer 参数,该参数代表调度该任务的定时器。
增加的 info: 方法代码如下:
1 2 3 4 5 6 7 |
|
对象复制
copy方法返回对象的 不可修改的副本,mutableCopy方法返回对象的可修改副本
自定义类的对象,为了保证可以调用copy方法和mutableCopy方法,通常需要:
让该类实现NSCopying协议和copyWithZone方法
让该类实现NSMutableCopying协议和mutableCopyWithZone方法
copyWithZone方法重写类似于下:
1 2 3 4 5 6 7 8 |
|
数组(NSArray与NSMutableArray)
NSArray代表一个有序可重复的集合,每个元素都有对应的顺序索引,但不可修改,NSMutableArray与NSArray的区别在于它使可修改的。
创建NSArray的方法:
array 创建一个不包含任何元素的空NSArray
arrayWithContentsOfFile:/initWithContentsOfFile: 读取文件内容来创建NSArray
arrayWithPbject:/initWithObject: 创建包含指定元素的NSArray
arrayWithObjects:/initWithObjects: 创建指定N个元素的NSArray
下例示范了NSArray的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
NSArray方法
集合所有元素调用方法:
makeObjectsPerformSelector: 集合每个元素依次调用指定方法
makeObjectsPerformSelector:withObject: 集合每个元素携带参数依次调用指定方法
集合元素进行隐式遍历,并依次执行一段代码块:
enumerateObjectsUsingBlock:
enumerateObjectsWithOptions:usingBlock:
enumreateObjectsAtIndexes:options:usingBlock:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
对NSArray进那个排序
sortedArrayUsingFunction:context: 用排序函数进行排序,函数必须返回NSOrderedDescending、NSOderedAscending、NSOrderedSame这些枚举值,返回一个排好序的NSArray对象
sortedArrayUsingSlector:用自身方法进行排序,方法必须返回NSOrderedDescending、NSOderedAscending、NSOrderedSame这些枚举值,返回一个排好序的NSArray对象
sortedArrayUsingComparator:用代码块进行排序,代码块必须返回NSOrderedDescending、NSOderedAscending、NSOrderedSame这些枚举值,返回一个排好序的NSArray对象
使用枚举器(NSEnumerator)遍历NSArray集合
用NSArray以下两方法来返回枚举器(NSEnumerator):
objectEnumerator 返回NSArray集合的顺序枚举器
reverseObjectEnumerator 返回NSArray集合的逆序枚举器
枚举器(NSEnumerator)包含如下两方法:
allObjects
nextobjext
一般借助 nextObject 方法即可对元素集合进行枚举,采用循环不断获取 nextObject 方法的返回值,知道该方法的返回值为nil结束循环
1 2 3 4 |
|
快速枚举(for(… in …))
NSMutableArray为NSArray的一个子集,比NSArray多出了对元素进行操作(添加、删除、替换、排序)的方法:
1 2 3 4 5 6 7 8 |
|
NSArray的KVC与KVO
setValue:forKey: 将NSArray中所有元素指定key的属性设置为value
valueForKey: 返回NSArray所有元素指定key的属性组成的NSArray
addObserver:forKeyPath:options:context: 为NSArray所有元素添加KVO监听器
removeObserver:forKeyPath: 删除NSArray所有元素的KVO监听器
addObserver:toObjectsAtIndexes:forKeyPath:options:context: 为NSArray指定范围的元素添加KVO监听器
removeObserver:fromObjectsAtIndexes:forKeyPath: 删除NSArray指定范围元素的KVO监听器
集合(NSSet和NSMutableSet)
与NSArray相似点:
通过count方法获取元素数量
快速枚举
通过objectEnmuerator方法来获取枚举器,病用枚举器遍历集合
makeObjectsPerformSelector:、makeObjectsPerformSelector:withObject:
enumerateObjectsUsingBlock:、enumerateObjectsWithOptions:UseingBlock:
KVC和KVO
之外的方法:
setByAddingObject: 向集合追加一个新元素,并返回新集合
setByAddingObjectsFromSet: 向集合追加多个新元素,并返回新集合
setByAddingObjectsFromArray: 向集合追加NSArray集合中的所有元素,并返回新集合
allObjects: 返回集合中所有元素组成的NSArray
anyObject: 返回集合中非随机某个元素
containObject: 判断是否包含指定元素 BOOL
member:判断该集合是否包含与该参数相等的元素,包含则返回元素,不包含则返回nil
objectsPassingTest: 需要传入一个代码块对集合过滤,保留满足条件(return BOOL值为YES)的元素组成新的NSSet并返回
objectsWithOptions:passingTest:与前一个方法相似,多一个可传入NSEnumerationOptions参数
isSubsetOfSet:判断当前集合是否为另一个集合的子集 BOOL
intersectsSet: 判断两个集合是否有交集 BOOL
isEqualToSet: 判断两个集合的元素是否相等
判断存入NSSet中两个元素相等的标准:
两个对象通过 isEqual: 方法比较返回YES
两个对象的hash方法返回值也相等
重写hash方法的注意点:
同一对象多次调用hash方法应该返回值相同
两个对象通过 isEqual: 方法返回YES时,这两个对象的 hash 方法应返回相等的值
对象中作为 isEqual: 标准的实例变量,都应该用来计算 hashCode值
重写hash方法的一般步骤:
把对象内每个用作 isEqual: 比较标准的实例变量都计算出一个int类型的hasCode值
把上一步计算出来的多个 hashCode 值组合计算出一个hashCode值病返回,此处为避免偶然相等,可通过将个实例变量的hashCode值乘以任意质数再相加
NSMutableSet的功能与用法
NSMutableSet继承于NSSet,代表一个元素可变的NSSet集合,因此创建NSMutableSet时可以指定底层Hash表的初始容量
NSMutableSet set = [NSMutableSet setWithCapacity:10];
增加的元素操作方法:
addObject: 追加一个元素
removeObject: 删除一个元素
removeAllObjects: 删除所有元素
addObjectsFromArray: 追加NSArray中的所有元素
unionSet: 计算两个集合的并集
minusSet:计算两个集合的差集
intersectSet:计算两个集合的交集
setSet: 用后一个集合元素替换已有集合中的所有元素
NSCountedSet的功能与用法
NSCountedSet是NSMutableSet得子类,比之会额外维护一个添加次数的状态,多次添加相同元素,添加次数会+1,多次删除相同元素。添加次数会-1,当元素的添加次数为0时,该元素才会真正的被删除,可通过如下方法获取指定元素的添加次数:
[set countForObject:@”燃灯”];
有序集合(NSOrderedSet与NSMutableOrderedSet)
具有类似于NSArray和NSSet的功能:
不允许元素重复
可以保持元素添加的顺序,且每个元素均有索引,可依据索引来操作元素
字典(NSDictionary与NSMutableDictionary)
NSDictionary的功能与用法
NSDictionary由多组key-value对组成,key与value可以是任意引用类型的数据,key不允许重复。
创建NSDictionary对象的常见方法:
dictionary 创建一个不包含任何key-value对的NSDictionary
dictionaryWithContentsOfFile:/initWithContentsOfFile: 读取指定文件的内容来初始化NSDictionary
dictionaryWithDictionary:/initWithDictionary: 使用已有的NSDictionary包含的key-value对来初始化NSDictiionary对象
dictionaryWithObject:forKey: 使用单个key-value对来创建NSDictionary对象
dictionaryWithObjects:forKeys:/initWithObjects:forKeys: 使用两个NSArray分别指定为key、value集合,创建多组key-value对的NSDictionary对象
dictionaryWithObjectsAndKeys:/initWithObjectsAndKeys: 按 value1,key1,value2,key2,….nil的格式传值,创建多组key-value对的NSDictionary对象
NSDictionary常用的方法:
count 返回key-value对的数量
allKeys 返回全部的key
allKeysForObject: 返回指定value的全部key
allValues 返回全部的value
objectForKey: 返回指定key的value
objectForKeyedSubscript: 支持通过下角标方式获取指定key对应的value
valueForKey:返货指定key的value
keyEnumerator 返回所有key的NSEnumerator对象
objectEnumerator 返回所有value的NSEnumerator对象
enmuerateKeysAndObjectsUsingBlock: 使用指定代码块来执行所有的key-value对
enumerateKeysAndObjectsWithOptions:usingBlock: 较之上个方法多个NSEnumerationOptions参数
writeToFile:atomically: 写入指定文件
对NSDictionary的key排序
keysSortedByValueUsingSelector: 依据NSDictionary 的所有value的制定方法的返回值对key排序,该方法必须返回 NSOrederedAscending、NSOrederedDescending、NSOrederedSame 三个值之一
keysSortedByValueUsingComparator: 该方法使用指定的代码块来遍历 key-value 对,病依据执行结果(NSOrederedAscending、NSOrederedDescending、NSOrederedSame )对key排序。
keysSortedByValueWithOptions:usingComparator: 与前一个方法类似,只是多了一个NSEnumerationOption参数
对 NSDictionary的kry进行过滤
keysOfEntriesPassTest: 使用代码块迭代处理 NSDictionary 的每一个key- value 对,代码块需返回 BOOL 值,返回为 YES 时才会被保留,代码块可接受三个参数,key、value、BOOL变量,BOOL变量为NO则会立即停止迭代
keysOfEntriesWithOptions:passingTest: 与前一个方法类似,多一个 NSEnumerationOptions 参数
用自定义类作为NSDictionary的key
自定义类需满足以下要求:
正确重写过 isEqual: 和 hash 方法
实现了 copyWithZone: 方法,该方法最好能返回对象的不可变副本
NSMutableDictionary的功能与用法
NSMutableDictionary继承自NSDictionary,代表一个key-value可变的NSDictionary集合,因此创建NSMutableDictionary时可以指定初始容量。
setObject:forKey: 设置一个key-value对,若已存在,则会进行替换
setObject:forKeyedSubscript: 支持下标来设置key-value对
addEntriesFromDictionary:将另一个NSDictionary中的所有key-value对复制到当前集合中
setDictionary:用另一个NSDictionary中素有的key-value对替换当前的集合
removeObjectForKey: 删除指定key的key-value对
removeAllObjects: 清空集合
removeObjectsForKeys: 使用多个key组成的NSArray作为参数,删除指定的多个key的key-value对
谓词
定义谓词
谓词用NSPredicate来代表,实际编程时会直接用 predicateWithFormat: 方法,并以谓词字符串为参数来创建对象。
NSPredicate* pred = [NSPredicate predicateWithFormat:@”name like ‘s*’ “];
如果为此中有占位符参数,则需要:
用谓词的predicateWithSubstitutionVariables: 方法为占位符参数设置参数值
执行谓词的 evaluateWithObject: 方法计算谓词的返回结果
ps:evaluateWithObject:substitutionVariables: 方法可以同时完成上面两步
使用谓词过滤集合
NSArray和NSMutableArray中提供了如下方法来使用谓词进行过滤:
(NSArray*)filteredArrayUsingPredicate:(NSPredicate*)predicate: 使用指定的谓词过滤NSArray集合,返回复合条件的元素组成的新集合
(void)filterUsingPredicate:(NSPredicate*)predicate: 使用指定的谓词过滤NSMutableArray集合,剔除不符合的元素
NSSet和NSMutableSet提供了如下方法来使用谓词进行过滤:
(NSSet*)filteredSetUsingPredicate:(NSPredicate*)predicate: 用指定的谓词过滤NSSet集合,返回复合条件元素组成的新集合
(void)filterUsingPredicate:(NSPredicate*)predicate: 使用指定的谓词过滤NSMutableSet机关和,剔除不符合的元素
在谓词中使用占位符参数
谓词表达式中支持一下两个占位符参数:
%K 动态传入属性名
%@ 动态传入属性值
ps:除此之外,还可以在谓词表达式中使用童泰改变的属性值,类似于环境变量 $SUBSTR
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
谓词表达式的语法
基本的比较运算符
= ==
=> >=
=< <=
>
<
!= <> 不相等
基本的逻辑运算符
AND &&
OR ||
NOT !
字符串比较运算符
BEGINSWITH
ENDSWITH
CONTAINS
LIKE
MATCHES
PS:比较运算符是区分大小写和重音符号的,若想不进行区分,可用[c]不区分大小写、[d]不区分中银符号来进行修饰。
name CONTAINS[cd] ‘jkl’
操作集合的运算符
ANY SOME
ALL
NONE
IN name IN { ‘Ben’, ‘Mel’, ‘Nike’ }
array[index]
array[FIRST]
array[LAST]
array[SIZE] 返回集合的元素个数
直接量
FALSE NO
TRUE YES
NULL NIL
SELF
‘text’ “text” 代表字符串
数组
数值
2、8、16进制数,分别以0b/0o/0x开头
保留字
AND、OR、IN、ALL、ANY、SOME、NONE、LIKE、CASEINSENSITIVE、CI、MATCHES、CONTAINS、BEGINSWITH、ENDSWITH、BETWEEN、NULL、NIL、SELF、TRUE、YES、FALSE、NO、FIRST、LAST、SIZE、ANYKEY、SUBQUERY、CAST、TRUEPREDICATE、FALSEPREDICATE