objective-c ×Ô¶¨Òå NSDictionary ¼üÀàµÄ×¢ÒâÊÂÏî (ËÄ)

2014-11-24 11:21:35 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 4

@end

ÏÂÃæÊDzâÊÔÀà

KeyTest.h


[cpp]
//
// KeyTest.h
// DictionaryKeyObject
//
// Created by BruceYang on 12-7-31.
// Copyright (c) 2012Äê EricGameStudio. All rights reserved.
//

#import
#import "KeyObject.h"

@interface KeyTest : NSObject {
NSMutableDictionary* _dic;
}

-(id) init;

-(void) test;

-(void) add;

-(void) add1;

-(void) echo;

-(void) echo1;

-(void) search;

-(void) dealloc;

@end

//
// KeyTest.h
// DictionaryKeyObject
//
// Created by BruceYang on 12-7-31.
// Copyright (c) 2012Äê EricGameStudio. All rights reserved.
//

#import
#import "KeyObject.h"

@interface KeyTest : NSObject {
NSMutableDictionary* _dic;
}

-(id) init;

-(void) test;

-(void) add;

-(void) add1;

-(void) echo;

-(void) echo1;

-(void) search;

-(void) dealloc;

@end

KeyTest.mm


[cpp]
//
// KeyTest.mm
// DictionaryKeyObject
//
// Created by BruceYang on 12-7-31.
// Copyright (c) 2012Äê EricGameStudio. All rights reserved.
//

#import "KeyTest.h"

@implementation KeyTest

-(id) init {
if((self = [super init])) {
_dic = [[NSMutableDictionary alloc] init];
}
return self;
}

-(void) test {
NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
for(int i = 0; i < 5; ++ i) {
KeyObject* keyObject = [[KeyObject alloc] initWithX:i*5 y:i*3];
NSString* valueStr = [NSString stringWithFormat:@"Test%d", i];

/**
* ÔÚµ÷Óà setObject:forKey ·½·¨ÒÔºó£¬
* key ¶ÔÏóµÄÒýÓüÆÊýÒÀȻΪ 1£¬value ¶ÔÏóµÄÒýÓüÆÊýÔö¼ÓΪ 2~
*
*/
NSLog(@"1.kRefCount = %lu, vRefCount = %lu", [keyObject retainCount], [valueStr retainCount]); // 1, 1~

/**
* ×÷Ϊ²ÎÊý´«½øÀ´µÄ keyObject ²»ÊÇ autorelease µÄ¶ÔÏó£¬ËùÒÔÒªÊÖ¶¯µÄÊͷŵô~
* Ö®ËùÒÔҪȥÊÖ¶¯ÊͷŵôÊÇÒòΪ×Öµä¶ÔÏóÒѾ­½«×÷Ϊ²ÎÊý´«½øÀ´µÄ keyObject ¼ü¶ÔÏóÉ±´ÁËÒ»·Ý~
* ÕâÒ²ÊÇ֮ǰÌáµ½µÄÔÚµ÷ÓÃ×Öµä¶ÔÏóµÄ setObject:forKey ·½·¨ºó keyObject ÒýÓüÆÊýΪʲôÒÀÈ»»¹ÊÇ 1 µÄÔ­Òò~
* ÒòΪ×Öµä¶ÔÏóÀïÃæµÄ¼ü¶ÔÏó²¢²»ÊÇʹÓõÄ×÷Ϊ²ÎÊý´«½øÀ´µÄÄǸö keyObject ~
*/
[dic setObject:valueStr forKey:keyObject];
[keyObject release];

NSLog(@"2.KRefCount = %lu, vRefCount = %lu", [keyObject retainCount], [valueStr retainCount]); // 1, 2~
}

NSLog(@"\n---------------------- ·Ö¸îÏß -------------------------\n");

for(KeyObject* keyObject in dic) {
NSString* valueStr = [dic objectForKey:keyObject];
NSLog(@"ValueStrReferenceCount = %lu", [valueStr retainCount]);
NSLog(@"keyObject.x = %d, keyObject.y = %d, valueStr = %@", keyObject.x, keyObject.y, valueStr);
}

/**
* ÒýÓüÆÊýΪ 1 µÄ×Öµä¶ÔÏó release Ò»ÏÂÖ®ºóÒýÓüÆÊýÒÀȻΪ 1£¬ºÎ½â£¿
* ±È½ÏºÏÀíµÄÒ»ÖÖ½âÊÍ£º
* dealloc Ö®ºóµÄ¶ÔÏóȥȡ retainCount »á·µ»Ø 1 ¶ø·Ç 0~
*/
NSLog(@"1.dicRefCount = %lu", [dic retainCount]); // 1~
[dic release];
NSLog(@"2.dicRefCount = %lu", [dic retainCount]); // 1~
}

-(void) add {
NSLog(@"add");
for(int i = 0; i < 5; ++ i) {
/**
* ÒòΪÊÇ autorelease µÄ¼ü¶ÔÏó£¬ËùÒÔʹÓÃÍê±Ïºó²»ÓÃÔÙÈ¥ÊÖ¶¯Êͷŵô~
*/
KeyObject* keyObject = [KeyObject kObjectWithX:i*5 y:i*3];
NSString* valueStr = [NSString stringWithFormat:@"Test%d", i];
[_dic setObject:valueStr forKey:keyObject];
}
NSLog(@"_dic.count = %lu", [_dic count]);
}

-(void) add1 {
NSLog(@"add");
for(int i = 0; i < 5; ++ i) {
/**
* ·Ç autorelease µÄ¼ü¶ÔÏó£¬Ê¹ÓÃÍê±ÏºóÒªÊÖ¶¯È¥ release µô£¬Ð§Âʽϸß(ÈËΪ¿ØÖƵÄÏú»Ùʱ»úÊÇ×î¼ÑµÄ)~
*/
KeyObject* keyObject = [[KeyObject alloc] initWithX:i*5 y:i*3];