Chapter 3 : 字符串
1. NSInteger : 不是一个对象,而是基本数据类型的typedef, 为64位的long或者32位的int
2. 各种数值:可用对象来封装基本数值(即将基本类型封装成对象)
-> NSNumber类包装基本数据类型:
+ (NSNumber *)numberWithChar:(char)value; + (NSNumber *)numberWithInt:(int)value; + (NSNumber *)numberWithFloat:(float)value; + (NSNumber *)numberWithBool:(BOOL)value; // 当然还包括unsigned,long和long long等 // 示例 NSNumber *number = [NSNumber numberWithInt:42]; // 重新获得封装的数据 - (char)charValue; - (int)intValue; - (float)floatValue; - (BOOL)boolValue;
-> NSValue : NSNumber其实是NSValue的子类,NSValue可封装任意值。可用NSValue将struct封装后放入到NSArray和NSDictionary中。
PS : @encode :编译器指令,可接受数据类型的名称并为你生成合适的字符串
NSRect rect = NSRectMake(1, 2, 30, 40); NSValue *value; value = [NSValue valueWithBytes:&rect objCType:@encode(NSRect)]; // 提取NSValue中的值 [value getValue:&rect]; // PS : Cocoa提供了常用的struct型数据转化成NSValue的便捷方法: + (NSValue *)valueWithPoint:(NSPoint)point; + (NSValue *)valueWithSize:(NSSize)size; + (NSValue *)valueWithRect:(NSRect)rect; - (NSPoint)pointValue; - (NSSize)sizeValue; - (NSRect)rectValue;
-> NSNull : 在Key下如果属性是NSNull表明没有这个属性,没有数值的话表明不知道是否有这个属性。
[NSNull null]总返回一样的值
[contast setObject:[NSNull null] forKey:@"home"]; // Access it id home = [contast objectForKey:@"home"]; if (home == [NSNull null]) { ... }
-> NSFileManager : 允许对File System进行操作(Create directory, delete files, remove files and get file information):
// 创建一个NSFileManager NSFileManager *manager = [NSFileManager defaultManager]; // 将代字符'~'替换成主目录 NSString *home = [@"~" stringByExpandingTildeInPath]; // 输出文件的扩展名 - (NSString *)pathExtension;
代码示例 :翻查main directory, 查找.jpg文件并输出找到的文件列表:
#import <Foundation/Foundation.h> int main(int argc, const char *argv[]) { NSAutoreleasePool *pool = [NSAutoreleasePool alloc] init]; // Code Start NSFileManager *manger = [NSFileManager defaultManager]; NSString *home; home = [@"~" stringExpandingTildeInPath]; NSDirectoryEnumerator *direnum; direnum = [manager enumeratorAtPath:home]; NSMutableArray *files; files = [NSMutableArray arrayWithCapacity:42]; NSString *filename; while (filename = [direnum nextObject]) { if ([[filename pathExtension] isEqualTo:@"jpg"]) { [files addObject:filename]; } } NSEnumerator *fileenum; fileenum = [files objectEnumerator]; while (filename = [fileenum nextObject]) { NSLog(@"%@", filename); } // Code End [pool drain]; return 0; }