关闭

OC之【NSDictionary详解】

标签: objective-cios
1821人阅读 评论(0) 收藏 举报
分类:

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

    

    //当字典被销毁时,里面的所有keyvalue都会做一次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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:629536次
    • 积分:9377
    • 等级:
    • 排名:第1999名
    • 原创:272篇
    • 转载:235篇
    • 译文:14篇
    • 评论:31条
    博客专栏
    最新评论