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

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

×ö ios ¿ª·¢£¬NSDictionary¡¢NSMutableDictionary£¬NSMutableArray¡¢NSArray ¶¼ÊǺܳ£ÓõÄÈÝÆ÷Àà

Array ¾Í²»¶à×öÌÖÂÛÁË£¬½ñÌìµÄÎÄÕÂÖ÷ÒªÌÖÂÛ NSDictionary ºÍ NSMutableDictionary~

ÒÔÍùÎÒÓà cocoa µÄ Dictionary µÄʱºò£¬¶¼ÊÇÑ¡ÔñÓà NSString À´×÷Ϊ¼ü¶ÔÏóµÄÀàÐÍ¡£

Ò»Ö±¶¼Ã»Óгöʲô´óµÄÎÊÌ⣬ÓÃÆðÀ´ºÜ˳ÊÖ~

²»ÇÉ×òÌ칤×÷ÊÒÖеÄÁíÍâÒ»¸ö³ÉԱ˵Óà NSString ×ö¼üÀàÐͺÜÒµÓ࣬ƴ½Ó°¡¡¢½âÎö°¡Ê²Ã´µÄ£¬ÒµÓ࣡£¡

ÆäʵÎÒÒ»Ö±¶¼¾õµÃÓÃ×Ö·û´®Æ´½Ó½âÎöÕâÖÖģʽ»¹²»´íµÄ£¬²»¹ýºóÀ´Ìýµ½¶Ô·½µÄ¾ÙÖ¤£¬Ò²±»Ëµ·þÁË¡£

¶Ô·½µÄÖ÷Òª¹ÛÄî¾ÍÓÃ×Ô¶¨ÒåµÄ¶ÔÏóÀàÐÍÀ´×÷Ϊ×ÖµäµÄ¼üÀàÐÍ£¬

ÎÒ±»Ëµ·þµÄÔ­ÒòºÜ¼òµ¥£¬×Ô¶¨ÒåµÄ¶ÔÏóÀàÐÍȷʵ¸ü½Ó½üÃæÏò¶ÔÏóµÄ˼¿¼Ä£Ê½~

ºÃ£¬ÎÒ³ÐÈÏÎÒ±»Ëµ·þÁË£¬²»¹ýÒòΪÎÒÊÖÍ·ÉÏÒ²ÓРһЩÊÂÇ飬ËùÒÔ²¢Ã»ÓÐÔÚÕâ¸öÎÊÌâÉÏÃæ×ö±àÂëÊÔÑé~

ÎÒÈÏΪcocoa µÄ×ÖµäÓ¦¸ÃÏñÖ§³Ö NSString ÄÇÑù£¬¶ÔÓû§×Ô¶¨ÒåµÄ¼ü¶ÔÏóÀàÐÍÌṩÁ¼ºÃµÄÖ§³Ö¡£

µ«ÊÂʵ¾ÍÊÇÕâô´ò»÷ÈË£¬µ±È»£¬×îÏȱ»´ò»÷µÄ²»ÊÇÎÒ£¬ÊÇÄǸöÌá³ö×Ô¶¨Òå¼ü¶ÔÏóÀàÐÍµÄ»ï¼Æ¡£

ËûÓöµ½µÄµÚÒ»¸öÎÊÌâ¾ÍÊÇ£¬´Ó NSObject À©Õ¹³öÀ´µÄÒ»¸öÀֻ࣬°üº¬Á½¸öint Ð͵ÄÊôÐÔ

È»ºó£¬ÓÃÕâ¸öÀà×÷Ϊ×ÖµäµÄ¼üµÄʱºò£¬¾¹È»ÔÚ setObject: forKey£º·½·¨µ÷ÓõÄʱºò£¬

±¨³ö unrecognized selector "copyWithZone:" µÄ´íÎó~

˼ââÁ¼¾ÃÍâ¼ÓgoogleÒ»·¬£¬ÖÕÓÚ·¢ÏÖÔ­À´ÊÇÒªÔÚÀ©Õ¹ÀàÖн« copyWithZone Õâ¸ö·½·¨ÏÔʽµÄÖØÐ´Ò»ÏÂ~

£¨copyWithZone Õâ¸ö·½·¨ÔÚ NSObject ÀïÃæÓÐËù¶¨Ò壬±¨´í¾ÍÊÇÒòΪ¸ÃÀàÐÍÈç¹ûÒª×÷Ϊ×ÖµäµÄ¼ü¾Í±ØÐëҪʵÏÖÕâ¸ö·½·¨£©~

µ±È»£¬ÎÊÌâÈç¹ûÕâôÇáÒ׾ͱ»¸ÉµôÁË£¬ÄÇÎÒÒ²¾Íû±ØÒªÐ´²©ÎļÇÔØÏÂÀ´ÁË~

×ÖµäµÄ¼ü×î»ù±¾µÄÒªÇó¾ÍÊDz»ÄÜÖØ¸´¡£¡£

¸ù¾ÝÎÒ×öµÄ±àÂë²âÊÔ£¬copyWithZone Êǽ« ¼ü¶ÔÏó²ÎÊý¿Ë¡һ·Ý£¬·ÅÖÃÔÚ×Öµä¶ÔÏóÀïÃæ~

µ«ÊÂÏÈÒª×öһЩ¼ì²é£¬¼ì²éмÓÈëµÄ¼üºÍÒÑ´æÔڵļüÃÇÊÇ·ñÖØ¸´£¬Èç¹ûÖØ¸´µÄ»°£¬¾Í¸²¸ÇËùÉèÖõÄÖµ»òÕߺöÂÔÕâÒ»´ÎÌí¼Ó~

²»¹ýÔõôÑù£¬¾ÍÊÇ×ֵ䲻ÔÊÐí´æÔÚÁ½¸öһģһÑùµÄ¼ü£¬·ñÔò¼ìË÷ÖµµÄʱºò»á·¢Éúì¶Ü~

¼ì²éÊÇ·ñÖØ¸´Ö÷Òª¼¯ÖÐÔÚ NSObject »ù´¡ÀàµÄÁ½¸ö·½·¨ÉÏÃæ£º

-(NSUInteger) hash;

-(BOOL) isEqual:(id)object;

hashÏ൱ÓÚ¶ÔÒ»ÍÅÊý¾Ý×ö md5 ÕªÒª£¬µÃ³öËûµÄÊý×ÖÇ©Ãû£¬´óÒâ¾ÍÊÇÁ½ÍÅÊý¾ÝÖ»ÒªÓÐÒ»¶¡µã¶ùµÄ²»Ò»Ñù

·µ»ØµÄÄǸöÎÞ·ûºÅÕûÊýµÄÖµ¶¼²»»áÏàͬ£¨ÄÇÊÇÍêÃÀµÄ¹þÏ£Ëã·¨£¬ÏÖʵÉú»îÖÐÖ»Òª±£Ö¤ºÜ´ó¼¸ÂÊÏÂÃæ²»Í¬µÄÊý¾Ý·µ»Ø²»¾¡ÏàͬµÄ·µ»ØÖµ¾ÍÐÐÁË£©

¾ÝÎÒÍÆ²â£¬¼ì²éÐÂÌí¼ÓµÄ¼üºÍÒÑ´æÔڵļüÊÇ·ñÖØ¸´°üº¬Á½²½£º

µÚÒ»²½ÊǶԱÈhash£¬Èç¹ûhash¶¼²»ÏàͬµÄ»°£¬Åж¨ÎªÁ½¸ö¼ü²»Í¬£¬½«µÚ¶þ²½Ê¡ÂÔµô£»

µÚ¶þ²¿ÊÇÔÚ hash ÏàµÈµÄ»ù´¡ÉϲŻáÖ´Ðеģ¬hashÏàµÈºó£¬ÔÙÓà isEqual ·½·¨À´Åж¨Á½¸ö¼üÊÇ·ñÏàµÈ~

£¨´ËÏàµÈ²»ÊÇ˵¶ÔÏóµÄÄÚ´æµØÖ·ÏàµÈ£¬¶øÊǶÔÏóÖÐËù°üº¬µÄÊý¾ÝÊÇ·ñÏàµÈ£©~


×ÛÉÏ£¬Èç¹ûÒª×Ô¶¨Òå×Öµä¼ü¶ÔÏóµÄÀàÐÍ£¬ÒªÖØÐ´ÏÂÃæµÄ¼¸¸ö·½·¨£º

1¡£copyWithZone£ºÕâ¸öÊDZØÐëÖØÐ´µÄ£¬·ñÔòÖ±½Ó±¨ÕÒ²»µ½·½·¨µÄ´íÎó

2¡£hash£ºÕâ¸öÄã¿ÉÒÔ²»ÖØÐ´£¬µ«ÊÇÄ㾡¿ÉÒÔÊÔһϣ¬µ°ÌÛËÀÄã~

3¡£isEqual: Õâ¸ö·½·¨±ØÐëÒªÖØÐ´Ò»Ï£¬Äã²»ÖØÐ´µÄ»°£¬Ä¬ÈϵÄʵÏÖ¾ÍÊǶԱÈÁ½¸ö¶ÔÏóµÄÄÚ´æµØÖ·

Ö»ÓÐÔÚÁ½¸ö¶ÔÏóÊÇͬһ¸ö¶ÔÏóµÄʱºò£¬²Å»á·µ»Ø YES¡£

µ±È»Õâ¸ö²»ÊÇÎÒÃÇËùÐèÒªµÄ£¬ÎÒÃÇÐèÒªµÄ¾ÍÊÇÖ±½Ó¹¹ÔìÒ»¸öеļü¶ÔÏó£¬Ö»ÒªÕâ¸öй¹ÔìµÄ¼ü¶ÔÏóÖÐËù°üº¬µÄÊý¾Ý

Óë×ÖµäÖеļüÏàÒ»ÖÂÁË£¬¾ÍÈ¡³ö×ÖµäÖÐÄǸö¼ü¶ÔÏóËù¶ÔÓ¦×ŵÄÖµ¶ÔÏó~


ÏÂÃæÉÏ´úÂë(½¨Ò»¸ö mac command Line Project£¬½«ÏÂÃæµÄ¼¸¸öÀàÎļþ×§½øÈ¥)£¬

¸ø³öÒ»¸öµäÐ͵ÄÄܹ»Ö±½ÓÄÃÀ´×÷Ϊ×Öµä¼ü¶ÔÏóµÄÀàÐͶ¨Ò壺

KeyObject.h


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

#import

@interface KeyObject : NSObject {
int _x;
int _y;
}

@property int x;
@property int y;

+(id) kObjectWithX:(int)x y:(int)y;

-(id) initWithX:(int)x y:(int)y;

-(id) copyWithZone:(NSZone*)zone;

-(NSString*) description;

-(NSUInteger) hash;

-(BOOL) isEqual:(id)object;

@end

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

#import

@interface KeyObject : NSObject {
int _x;
int _y;
}

@property int x;
@property int y;

+(id) kObjectWithX:(int)x y:(int)y;

-(id) initWithX:(int)x y:(int)y;

-(id) copyWithZone:(NSZone*)zone;

-(NSString*) description;

-(NSUInteger) hash;

-(BOOL) isEqual:(id)object;

@end

KeyObject.m


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

#import "KeyObject.h"

@implementation KeyObject

@synthesize x = _x;
@synthesize y = _y;

+(id) kObjectWithX:(int)x y:(int)y {
return [[[self alloc] initWithX:x y:y] autorelease];
}

-(id) initWithX:(int)x y:(int)y {
if((self = [super init])){
_x = x;
_y = y;
}
return self;
}

/**
* ×¢Ò⣺
* ²»ÄÜ autorelease£¡setObject:forKey: µÄʱºò£¬key ¶ÔÏóµÄ retainCount ²¢²»»á¼Ó 1~
* autorelease µÄ»°µ¼ÖÂÒ»ÍÑÀëËùÔÚµÄÓò£¬¼ü¶ÔÏó¾ÍʧЧ£¬Òý·¢ EXEC_BAD_ACCESS ´íÎó~
* ÓÃ Instrument