申请、使用字符串
使用NSString和NXMutableString类
NSString和NXMutableString类允许你把一串字符存到内存中。NSString类是不能更改的,NSString类一
旦被创建,内容就不能被修改了。可变字符串NSMutableString创建以后还可以被修改通过这两个类实例的length 方法可获取内容长度 ,通过实例对象的 integerValue, floatValue, 和doubleValue 方法来获取int ,float 或double 类型值
如果打算使用C语言库里的字符串,就不需要使用@符号,用NSString的UTF8String可把NSString 转为C语言库里的字符串类型,
const char *cString = [@"Objective-C String" UTF8String];
NSLog(@"cString = %s", cString);要把一个C字符串转换成NSString,必须使用NSString类的stringWithUTF8String:方法
NSString *objectString = [NSString stringWithUTF8String:"C String"];
查找一个字符串内容在另一个字符串里面所在的范围,用NSRange结构
NSString *haystack = @"My Simple String";
NSString *needle = @"Simple"; NSRange range = [haystack rangeOfString:needle]; if (range.location == NSNotFound){ /* Could NOT find needle in haystack */ } else { /* Found the needle in the haystack */ NSLog(@"Found %@ in %@ at location %lu", needle, haystack, (unsigned long)range.location); }如果你在查询字符串上拥有更多控制权的话,你可以使用rangeOfString:options:方法。其中options参数是
NSStringCompareOptions类型的。 enum { NSCaseInsensitiveSearch = 1, NSLiteralSearch = 2, NSBackwardsSearch = 4, NSAnchoredSearch = 8, NSNumericSearch = 64, NSDiacriticInsensitiveSearch = 128, NSWidthInsensitiveSearch = 256, NSForcedOrderingSearch = 512, NSRegularExpressionSearch = 1024 };枚举中的这些值是可以一起使用的。这表示你可以用OR操作符(|字符)连接它们
可变字符串和不可变字符串是相似的。不同的是可变字符串可以在运行时被修改,可以使用appendString,replaceOccurrencesOfString 等来修改字符串内容;
申请、使用数字
用NSNumber类来用面向对象的方法处理数字。如果你只需要简单的数字(而不是对象),用NSInteger
类来操作有符号数(正数或者负数),用NSUInteger类来操作无符号数(正数或0),用CGFloat类和double操作浮点数NSNumber实例的方法
numberWithInteger:
将一个整型值封装成一个NSNumber实例 numberWithUnsignedInteger: 将一个无符号整型值(正数或零)封装成一个NSNumber实例 numberWithFloat: 将一个浮点数封装成一个NSNumber实例 numberWithDouble: 将一个double类型的数封装成一个NSNumber实例如:NSNumber *signedNumber = [NSNumbernumberWithInteger:-123456];
下面这些方法用来从一个NSNumber实例提取纯数字:
integerValue 从调用该函数的NSNumber实例中返回一个整型NSInteger类型值。 unsignedIntegerValue 从调用该函数的NSNumber实例中返回一个无符号整型NSUInteger类型值。 floatValue 从调用该函数的NSNumber实例中返回一个浮点数CGFloat类型值。 doubleValue 从调用该函数的NSNumber实例中返回一个双精度double类型值
要将一个无符号整型转换为NSString,你可以用%lu格式
NSNumber *unsignedNumber = [NSNumber numberWithUnsignedInteger:123456];NSString *numberInString =
[NSStringstringWithFormat:@"%lu", (unsigned long)[unsignedNumberunsignedIntegerValue]]; NSLog(@"numberInString = %@", numberInString);需要注意的是NSNumber类的任何一个以numberWith 开头的方法都返回一个自动释放的NSNumber对
象。
分配、使用数组
用NSArray和NSMutableArray类把多个对象存储到操作相对更加方便的数组中
你可以把任何NSObject类或者它子类的对象放到NSArray类型中
NSArray和NSMutableArray的主要区别是NSMutableArray可以在分配空间和初始化之后修改,然而
NSArray不可以被修改用initWithObjects:来初始化NSArray,并在最后放入一个nil,
也可以用NSArray类的arrayWithObjects:方法来创建一个可自动释放的数组可以调用数组的count方法类得到数组中的对象个数
可以用 objectAtIndex:方法来获得一个指定位置的对象NSMutableArray 可通过addObject、removeObject、addObjectsFromArray等来增删对象
简单的利用NSArray 或NSMutableArray类的基于块对象的排序方法。需要
注意的是NSArray类的排序方法返回一个新的额NSArray实例,原来的数组没有改变。这是因为NSArray一旦初始化之后就不能被改变,然而排序是要改变一个数组的。相对应的,NSMutableArray 类的排序方法返回的就是要排序的数组,而不会返回一个新的数组
分配和使用 Dictionaries
NSNumber *age = [NSNumber numberWithUnsignedInteger:51];
NSDictionary *person = [[NSDictionary alloc] initWithObjectsAndKeys: @"Anthony", @"First Name", @"Robbins", @"Last Name", age, @"Age", nil]; NSLog(@"First Name = %@", [person objectForKey:@"First Name"]); NSLog(@"Last Name = %@", [person objectForKey:@"Last Name"]); NSLog(@"Age = %@", [person objectForKey:@"Age"]); The results will then be printed out as shown here: First Name = Anthony Last Name = Robbins Age = 51用值和键的对儿初始化dictionary
NSDictionary对应的可改变
dictionary类NSMutableDictionary在分配内存和初始化之后可以被修改。例如,如果在dictionary初始化之后想从其中删除Age 这个key对应的对象可以采用dictionary的allKeys方法来得到dictionary所有的key,或者 enumerateKeysAndObjectsUsingBlock,或者用keyEnumerator来获得一个NSEnumerator对象
for (id keyInDictionary in [person allKeys]){
idobjectForKey = [person objectForKey:keyInDictionary]; NSLog(@"Key = %@, Object For Key = %@", keyInDictionary, objectForKey); }NSEnumerator *keys = [person keyEnumerator];
id keyInDictionary = nil; while ((keyInDictionary = [keys nextObject]) != nil){ id objectForKey = [person objectForKey:keyInDictionary]; NSLog(@"Key = %@, Object For Key = %@", keyInDictionary, objectForKey);}
使用一个可变dictionary的keyEnumerator方法时,不允许在遍历key的过程中改变dictionary中key对应
的值. 如果你记得的话,可变的arrays也有同样的规则
分配和使用Sets
Sets 和 array非常相似。二者最大的区别就是sets中相同对象只能被添加一次。当你第二次添加同一个对
象时,sets会拒绝添加用NSSet类表示不可改变的sets,用NSMutableSet类表示可变,一个set 不仅仅比较对象在内存中的位置,而且比较这些对象的内容,通过NSMutableSet 类的addObject:方法类像set 添加一个新的对象。你也可以用removeObject 方法来删除对象
用count方法来获得set中的对象个数。也可以用allObjects方
法来获得set中包含所有对象的数组如果想在set中获取一个对象,调用set的anyObject方法。就像函数名代表的,这个函数返回set中一个
随机的对象。如果set为空,则返回空