2

後で使用するために NSIndexPath オブジェクトのコピーを保存したいと考えています。次に、元のオブジェクトを上書きするようにします。オブジェクトの保持カウントをインクリメントするだけなのでcopy、元のインデックス パスのディープ コピーを作成するにはどうすればよいですか?

...
NSIndexPath *originalIndexPath = [tappedIndexPath copy]; // need to make a deep copy here
tappedIndexPath = ...;
...
// need the original index path here
4

2 に答える 2

2

とにかく不変であるためNSIndexPath、コピーが深いか浅いかは問題ではありません。実際、ディープ コピーはメモリの無駄遣いになります。

あなたの例について:あなたがしたいことのために、インデックスパスをまったくコピーする必要はありません。別のインデックス パス オブジェクトをtappedIndexPath(2 行目で) 割り当てても、まったく影響はありませんoriginalIndexPath。スニペットの最後でoriginalIndexPathも、以前とまったく同じオブジェクトを指します。

于 2012-05-19T14:24:53.133 に答える
0

あなたの質問は明確ではありません。後で別のクラスで使用するためにこれを保存する必要がある場合は、以下の 2 つの方法を試してください。

NSIndexPath を NSUserDefaults に直接保存することはできません。ただし、NSKeyedArchive と NSKeyedUnarchiver を使用してこれを行うことができます。

http://gordiychuk.co.uk/2012/02/10/how-to-save-nsindexpath-to-nsuserdefaults/

NSIndexPath でこれに何が必要なのか正確にはわかりません。これを行ったのは、UIViewController を作成したときに init メソッドを介して NSIndexPath を渡しただけです。ユーザーが別のクラスで選択した行を知る必要がありました。

例えば:

- (id)initWithNibName:(NSString *)nibNameOrNil 
               bundle:(NSBundle *)nibBundleOrNil 
   initWithNSIdexPath:(NSIndexPath *)indexPath
{
    // Do something indexPath
}
于 2012-05-19T14:29:40.403 に答える