개체에 표준 isEqual:
및 hash
선택기를 사용하지 않는 사용자 지정 NSMutableSet
을 만들려고합니다.사용자 지정 isEqual : 및 해시 콜백이있는 NSMutableSet
일반적으로 Parse와 함께 사용하고 싶습니다. 나는 서브 클래스 인스턴스를 포함하는 NSMutableSet
을 가지고 있는데, 같은 서브 클래스 인스턴스 인 경우 objectId
이라면 동일하다고 생각합니다. PFObject
하위 클래스에서 isEqual:
및 hash
을 무시할 수 있지만 모든 내 개체에 해당 기능이 필요하지 않습니다. 게다가, Parse는 내부적으로이 방법들을 사용하기 때문에 나는 그들을 엉망으로 만들고 싶지 않습니다. 여기
#import <Foundation/Foundation.h>
@interface NSMutableSet (Additions)
+ (NSMutableSet *)setWithParseObjectIdIsEqualCallback;
@end
#import "NSMutableSet+Additions.h"
@implementation NSMutableSet (Additions)
static Boolean ParseObjectIdIsEqualCallback(const void *value1, const void *value2)
{
PFObject *obj1 = (__bridge id)value1;
PFObject *obj2 = (__bridge id)value2;
NSCParameterAssert([obj1 isKindOfClass:PFObject.class]);
NSCParameterAssert([obj2 isKindOfClass:PFObject.class]);
NSCParameterAssert([obj1 isMemberOfClass:obj2.class]);
return [obj1.objectId isEqualToString:obj2.objectId];
}
static CFHashCode ParseObjectIdHashCallback(const void *value)
{
PFObject *object = (__bridge id)value;
NSCParameterAssert([object isKindOfClass:PFObject.class]);
return object.objectId.hash;
}
+ (NSMutableSet *)setWithParseObjectIdIsEqualCallback
{
CFSetCallBacks callbacks = kCFTypeSetCallBacks;
callbacks.equal = ParseObjectIdIsEqualCallback;
callbacks.hash = ParseObjectIdHashCallback;
CFMutableSetRef set = CFSetCreateMutable(kCFAllocatorDefault, 0, &callbacks);
return CFBridgingRelease(set);
}
@end
난 정말 모르겠어요, 그리고 난 CFBridgingRelease()
과 같은 핵심 기반 개체 및 기능에 익숙하지 않습니다.
NSMutableSet을 사용하는 NSObject 하위 클래스를 만드는 방법은 어떻습니까? 그렇게하면 대부분의 함수를 집합에 전달할 수 있고 함수와 물건을 등호 할 수 있습니다. – Fogmeister