住院好几天了。昨天刚安上无线网卡,写了半天笔记结果破输入法死机白忙活了,还得重搞。
NSArray 是Cocoa的一个类,用于存放对象,这个类不可以直接存放C中数据类型的数据,需要转换成Object-C的对象才可以。
创建一个NSArray对象的方法有很多,这里先说一个比较简单的方法。
+ (NSArray) arrayWithObjects:(id) obj, ...
count 用于获取NSArray中的对象个数
-(unsigned int) count;
objectAtIndex 用于根据索引获取相应的对象,注意如果访问了不存在的索引,不会像PHP一样最多出现个Notice,将会导致程序崩溃,其实这是个好事,因为他会让你及时的修正,避免由于使用非法索引而导致出现难以调试的Bug。
- (id) objectAtIndex:(unsigned int)index;
componentsJoinedByString 这个跟PHP中的implode类似,用于根据一个字符串来将数组连接成一个新的字符串。
- (NSString *) componentsJoinedByString:(NSString *)dec;
componentsSeparatedByString 这个跟PHP中的explode类似,用于根据一个字符串来拆分另外一个字符串,并将拆分后的结果存放在NSArray中。
- (NSArray *) componentsSeparatedByString:(NSString *)dec;
NSMuTableArray 跟NSString一样NSArray也是不可变对象,一旦创建后不可以进行增删操作,需要NSMuTableArray 来操作
NSMuTableArray 的创建方式也很简单
+(id) arrayWithCapacity:(unsigned int)numItems;
addObjects 用于在数组结尾增加新的对象
+ (void) addObject:(id) anObject;
removeObjectAtIndex 根据索引删除数组中的对象
- (void) removeObjectAtIndex:(unsigned int) index;
以上是数组的简单操作,这里介绍下几种简单的遍历方式。
第一种 使用for循环加 count 方法遍历
int i = 0;
for(i = 0; i < [array count]; i++)
{
[array objectAtIndex:i]
}
第二种 使用for in方式遍历
for(NSString *str in array)
{
操作
}
第三种 使用枚举方式遍历
NSEnumerator *enumer;
emumer = [array objectEnumerator];
NSString *str;
while(str = [enumer nextObject])
{
操作
}
要注意的是 使用这种方式遍历 遍历过程中不可以对数组进行增删操作 否则将会出现一些未知的错误
NSDictionary Object-C 允许你通过这个类来定义字典数据。
+ (id) dictionaryWithObjectsAndKeys:
(id) firstObject,...;
NSDictionary *dicts;
dicts = [NSDictionary dictionaryWithObjectsAndKeys:
nameObj, @"name",
oldObj, @"old",
sexOBj, @"sex"
];
objectForKey 根据字典的key来获取对象
- (id) objectForKey: (id) akey;
使用NSMuTableDictionary 来处理创建一个动态的字典
+ (id) dictionaryWithCapacity: (unsigned int)numItems;
setObject 用于对字典添加一条Key值,如果key存在则覆盖
-(void) setObject:(id) anObject
forKey:(id) aKey;
removeObjectForKey 删除字典中的一个key值
- (void) removeObjectForKey:(id) akey;
像之前说的一样,NSArray和NSDictionary都只能存储对象,C类型的数据是无法直接存储的,所以如果需要存储这些数据的话必须要转换成对象后才可以,下面介绍一些转换方法。
NSNumber类封装了一些方法用于将一些数值类型转换成对象。
+(NSNumber *) numberWithChar:(char) value;
+(NSNumber *) numberWithInt:(int) value;
+(NSNumber *) numberWithFloat:(float) value;
+(NSNumber *) numberWithBool:(BOOL) value;
从对象中获取这些数据的值也很简单
- (int) intValue;
- (char) charValue;
- (float) floatValue;
- (BOOL) boolValue;
- (NSString *) stringValue;
NSValue
NSNumber 就是 NSValue的一个子类,使用NSValue可以包装任意类型的数据,使其可以放在数组或者字典中。
+ (NSValue *) valueWithBytes: (const void *)value
objCtype: (const char *)type;
第一个参数使要包装的数据地址,使用C的取址符获取,第二个参数用于描述改数据的字符串,主要描述了数据类型和大小。使用@encode可以使用指令获取,例如 @encode(NSRect)。
getValue 使用getValue方法可以获取NSValue的实际值
- (void *) getValue: (void *)value;
返回的数据将存放在第一个参数所指的地址中。
Cocoa还提供了一些比较便捷的方法用于处理常用的结构
+ (NSValue *) valueWithPoint: (NSPoint) point;
+ (NSValue *) valueWithSize: (NSSize) size;
+ (NSValue *) valueWithRect: (NSRect) rect;
- (NSPoint) pointValue;
- (NSSize) sizeValue;
- (NSRect) rectValue;
NSNull 这个数据类型用于表示一个 为空的数据(nil) 类似PHP的 NULL,表示什么都没有,使用null方法可以创建这个对象。
+ (NSNull *)null;
NSNull的值总是一样的 所以 可以直接用 == 进行比较。