objective-c – NSSet中的重复自定义对象

objective-c – NSSet中的重复自定义对象,第1张

概述我对Objective-C中的NSMutableSet有一些问题. 我了解到NSSet将比较两个对象的哈希码以确定它们是否相同. 问题是,我实现了一个自己是NSObject的子类的类.该类中有一个属性NSString * name.我想要做的是当这个自定义类的实例具有相同的变量值“name”时,它们应该是相同的,并且在添加到NSMutableSet时不应该复制这样的相同类. 所以我重写了 – (N 我对Objective-C中的NSMutableSet有一些问题.
我了解到NSSet将比较两个对象的哈希码以确定它们是否相同.
问题是,我实现了一个自己是NSObject的子类的类.该类中有一个属性Nsstring * name.我想要做的是当这个自定义类的实例具有相同的变量值“name”时,它们应该是相同的,并且在添加到NSMutableSet时不应该复制这样的相同类.

所以我重写了 – (NSUInteger)哈希函数,调试显示它为我的两个实例obj1,obj2(obj1.name == obj2.name)返回相同的哈希值.但是当我将obj1,obj2添加到NSMutableSet时,NSMutableSet仍然包含obj1,obj2.

我尝试了两个具有相同值的Nsstring,然后将它们添加到NSMutableSet中,该集合只有一个Nsstring.

可能是什么解决方案?感谢您的任何帮助!

自定义类:
Object.h:

#import <Foundation/Foundation.h>@interface Object : NSObject@property (retain) Nsstring *name;@end

Object.m

@implementation Object@synthesize name;-(BOol)isEqualTo:(ID)obj {    return [self.name isEqualToString:[(Object *)obj name]] ? true : false;}- (NSUInteger)hash {    return [[self name] hash];}@end

主要:

#import <Foundation/Foundation.h>#import "Object.h"int main(int argc,const char * argv[]){    @autoreleasepool {        Object *obj1 = [[Object alloc]init];        Object *obj2 = [[Object alloc]init];        obj1.name = @"test";        obj2.name = @"test";        NSMutableSet *set = [[NSMutableSet alloc] initWithObjects:obj1,obj2,nil];        NSLog(@"%d",[obj1 isEqualTo:obj2]);        NSLog(@"%ld",[set count]);    }    return 0;}
解决方法 而不是实现isEqualTo:你必须实现isEqual:

- (BOol)isEqual:(ID)object {    return [object isKindOfClass:[MyObject class]] &&           [self.name isEqual:[(MyObject *)object name]];}

如果self.name和object.name都为nil,那么(可能会错误地)返回NO.如果你想要返回YES,如果两个属性都是零,你应该使用

- (BOol)isEqual:(ID)object {    if ([object isKindOfClass:[MyObject class]]) {        return (!self.name && ![(MyObject *)object name]) ||        [self.name isEqual:[(MyObject *)object name]];    }    return NO;}
总结

以上是内存溢出为你收集整理的objective-c – NSSet中的重复自定义对象全部内容,希望文章能够帮你解决objective-c – NSSet中的重复自定义对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存