自定义字典键对象

自定义字典键对象需要重写下面3个方法(需要实现以下三个方法,我也是网上查的资料,但是我很好奇,他们怎么知道要实现这些方法,是从官方文档知道的吗,还是怎样,如果有哪位大牛知道,还请赐教。。。。我也查了官方资料,但是一点都看不出来需要实现这几个方法就行。。)

遵守NSCoding协议

①,copyWithZone:这个是必须重写的,否则直接报找不到方法的错误

②,hash:这个你可以不重写,主要是我不知道怎么写

③,isEqual: 这个方法必须要重写一下,你不重写的话,默认的实现就是对比两个对象的内存地址

只有在两个对象是同一个对象的时候,才会返回 YES。

当然这个不是我们所需要的,我们需要的就是直接构造一个新的键对象,只要这个新构造的键对象中所包含的数据

与字典中的键相一致了,就取出字典中那个键对象所对应着的值对象~


以下是我的小demo


#import <Foundation/Foundation.h>


@interface RoomInfoKey : NSObject <NSCoding>

@property (nonatomic,copy) NSString *rtypeId;

@property (nonatomic,copy) NSString *roomId;

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


@end


#import "RoomInfoKey.h"

@interface  RoomInfoKey()


@end

@implementation RoomInfoKey

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

//{

//    RoomInfoKey *roomInfoKey = [[RoomInfoKey alloc] init];

//    roomInfoKey.rtypeId = self.rtypeId;

//    roomInfoKey.roomId = self.roomId;

//    return roomInfoKey;

//    

//}


- (id)copyWithZone:(NSZone *)zone

{

    id aCopy = [[[self class] alloc]init];

    if (aCopy) {

        [aCopy setRoomId:[self.roomId copyWithZone:zone]];

        [aCopy setRtypeId:[self.rtypeId copyWithZone:zone]];

    }

    return aCopy;

}


- (BOOL)isEqual:(id)object

{

    

    if ([object isKindOfClass:self.class] && [((RoomInfoKey *)object).rtypeId isEqualToString:self.rtypeId] && [((RoomInfoKey *)object).roomId  isEqualToString:self.roomId]) {

        return YES;

    }

    return NO;

}


- (NSUInteger)hash

{

    return 0;

}


@end



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值