Objective-C 基础(五)

申请、使用字符串

使用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为空,则返回空

posted @ 2013-02-08 14:05  Ivan的coding世界  阅读(235)  评论(0编辑  收藏  举报