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;
}

 

 

posted on 2012-09-25 18:18  BankFish  阅读(289)  评论(0编辑  收藏  举报