NSMutableSet を使用して一連のオブジェクトを作成しようとしています。オブジェクトは Song で、各タグには名前と作者があります。
コード:
#import "Song.h"
@implementation Song
@synthesize name,author;
-(Song *)initWithName:(NSString *)n andAuth:(NSString *)a {
self = [super init];
if (self) {
name = n;
author = a;
}
return self;
}
-(void)print {
NSLog(@"song:%@; author:%@;", name,author);
}
-(BOOL)isEqual:(id)obj {
//NSLog(@"..isEqual");
if([[obj name] isEqualToString:name]
&& [[obj author] isEqualToString:author]) {
return YES;
}
return NO;
}
-(BOOL)isEqualTo:(id)obj {
NSLog(@"..isEqualTo");
if([[obj name] isEqualToString:name]
&& [[obj author] isEqualToString:author]) {
return YES;
}
return NO;
}
@end
次に、このオブジェクトを NSMutableSet に入れます:</p>
int main(int argv, char *argc[]) {
@autoreleasepool {
Song *song1 = [[Song alloc] initWithName:@"music1" andAuth:@"a1"];
Song *song2 = [[Song alloc] initWithName:@"music2" andAuth:@"a2"];
Song *song3 = [[Song alloc] initWithName:@"music3" andAuth:@"a3"];
Song *needToRemove = [[Song alloc] initWithName:@"music3" andAuth:@"a3"];
NSMutableSet *ns = [NSMutableSet setWithObjects:song1, song2, song3, nil];
[ns removeObject:needToRemove];
for (Song *so in ns) {
[so print];
}
}
}
しかし、奇妙なことが起こりました。music3 はまだ NSMutableSet にあります。しかし、NSMutableArray に変更すると、music3 は削除できます。NSMutableArray の removeObject は、オブジェクトの isEqual メソッドを呼び出します。removeObject の説明を見つけました。一文:</p>
Removes a given object from the set.
それがどのように機能するかを説明していません.このようにオブジェクトを削除するには?NSMutableSetのremoveObjectはどのメソッドを呼び出しますか?