0

次の 2 つのステートメントを見てください。

NSMutableIndexSet *selectedRows = [[[NSMutableIndexSet alloc] initWithIndexSet:[_dataTableView selectedRowIndexes]] autorelease];
NSMutableIndexSet *rowsToDelete = [[selectedRows copy] autorelease];

rowsToDelete は NSMutableIndexSet であると予想していましたが、NSIndexSet です。NSMutableIndexSet にコピーが実装されていないようです。だとしたら、そんな基本型にもコピーを実装しないのは大失敗ではないでしょうか。または、IndexSet インターフェイスの基本的なものが欠けていますか?

4

2 に答える 2

1

Copy は変更不可能なコピーを返します。変更可能なコピーを取得したい場合は、メッセージ「mutableCopy」を NSMutableCopying プロトコルを実装するクラスに送信する必要があります。開発者向けドキュメントでわかるように、NSMutableIndexSet は NSMutableCopying と NSCopying の両方のプロトコルに準拠しています: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableIndexSet_Class/Reference/Reference.html

于 2013-06-03T11:14:15.400 に答える
0

はい、動作は正しいです。

と の違いに戸惑うかもしれませcopymutableCopy

copyが返すオブジェクトを返しますcopyWithZone:。クラスに不変バリアントと可変バリアントの両方がある場合は、不変バリアントが返されます。

のドキュメントの説明を参照してください。copyWithZone:

「不変対可変」という考慮事項が受信オブジェクトに適用される場合、返されるコピーは不変です。それ以外の場合、コピーの正確な性質はクラスによって決定されます。

于 2013-06-03T11:14:27.200 に答える