OC之【NSDictionary详解】

main.m文件

#import <Foundation/Foundation.h>

#import "Student.h"

#pragma mark 字典的初始化

void dictCreate() {

    // NSDictionary是不可变的

    NSDictionary *dict = [NSDictionarydictionaryWithObject:@"v"forKey:@"k"];

    

    //最常用的初始化方式

    dict = [NSDictionarydictionaryWithObjectsAndKeys:

           @"v1", @"k1",

           @"v2", @"k2",

           @"v3", @"k3",nil];

    

   NSArray *objects = [NSArrayarrayWithObjects:@"v1",@"v2", @"v3",nil];

   NSArray *keys = [NSArrayarrayWithObjects:@"k1",@"k2", @"k3",nil];

    dict = [NSDictionarydictionaryWithObjects:objects forKeys:keys];

   NSLog(@"%@", dict);

}

#pragma mark 字典的基本用法

void dictUse() {

    NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:

           @"v1", @"k1",

           @"v2", @"k2",

           @"v3", @"k3",nil];

    

    // count是计算有多少个键值对(key-value)

   NSLog(@"count=%zi", dict.count);

    

    //由于NSDictionary是不可变的,所以只能取值,而不能修改值

   id obj = [dict objectForKey:@"k2"];

   NSLog(@"obj=%@", obj);

    

    //将字典写入文件中

    NSString *path =@"/Users/apple/Desktop/dictionary.xml";

    [dict writeToFile:pathatomically:YES];

    

    //从文件中读取内容

    dict = [NSDictionarydictionaryWithContentsOfFile:path];

   NSLog(@"dict=%@", dict);

}

#pragma mark 字典的用法

void dictUse2() {

    NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:

                         @"v1", @"k1",

                         @"v2", @"k2",

                         @"v3", @"k3",nil];

    // 返回所有的key

   NSArray *keys = [dict allKeys];

    //NSLog(@"keys=%@", keys);

    

   NSArray *objects = [dict allValues];

    //NSLog(@"objects=%@", objects);

    

    // 根据多个key取出对应的多个value

    // 当key找不到对应的value时,用marker参数值代替

    objects = [dict objectsForKeys:[NSArrayarrayWithObjects:@"k1",@"k2", @"k4", nil]notFoundMarker:@"not-found"];

   NSLog(@"objects=%@", objects);

}

#pragma mark 遍历字典

void dictFor() {

    NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:

                         @"v1", @"k1",

                         @"v2", @"k2",

                         @"v3", @"k3",nil];

    // 遍历字典的所有key

   for (id keyin dict) {

       id value = [dict objectForKey:key];

       NSLog(@"%@=%@", key, value);

    }

}

#pragma mark 遍历字典2

void dictFor2() {

    NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:

                         @"v1", @"k1",

                         @"v2", @"k2",

                         @"v3", @"k3",nil];

    // key迭代器

   NSEnumerator *enumer = [dict keyEnumerator];

   id key = nil;

   while ( key = [enumer nextObject]) {

       id value = [dict objectForKey:key];

       NSLog(@"%@=%@", key, value);

    }

    

    // 对象迭代器

    // [dict objectEnumerator];

}

#pragma mark 遍历字典3

void dictFor3() {

    NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:

                         @"v1", @"k1",

                         @"v2", @"k2",

                         @"v3", @"k3",nil];

    [dict enumerateKeysAndObjectsUsingBlock:

     ^(id key,id obj, BOOL *stop) {

       NSLog(@"%@=%@", key, obj);

    }];

}

#pragma mark 

void dictMemory() {

   Student *stu1 = [StudentstudentWithName:@"stu1"];

   Student *stu2 = [StudentstudentWithName:@"stu2"];

   Student *stu3 = [StudentstudentWithName:@"stu3"];

    

    //一个对象称为字典的key或者value时,会做一次retain操作,也就是计数器会+1

    NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:

                          stu1,@"k1",

                          stu2,@"k2",

                          stu3,@"k3", nil];

    

    //当字典被销毁时,里面的所有key和value都会做一次release操作,也就是计数器会-1

}

int main(int argc,const char * argv[])

{

    @autoreleasepool {

       dictMemory();

    }

   return 0;

}

Student.h文件

#import <Foundation/Foundation.h>

@interface Student :NSObject

@property (nonatomic,retain) NSString *name;

+ (id)studentWithName:(NSString *)name;

@end

Student.m文件

#import "Student.h"

@implementation Student

+ (id)studentWithName:(NSString *)name {

   Student *stu = [[Studentalloc] init];

    stu.name = name;

   return [stu autorelease];

}

- (void)dealloc {

   NSLog(@"%@被销毁了", _name);

    // 释放name

    [_namerelease];

    [superdealloc];

}

@end

On the road。。。
原文地址:https://www.cnblogs.com/ianhao/p/4426122.html