現在、数独アプリケーションに取り組んでいます。数値は、NSNumbers の多次元 NSMutableArray 内に格納されています。グリッドに数字を表示するために、SudokuGridView に配列を保持しています。パズルを解くときが来たら、パズルを解くために作成した NSOperation のサブクラスに [グリッド numberGrid] を渡します。
グリッドの配列は、次のようにプロパティとして定義されます。
@property (readonly) NSMutableArray *numberArray;
それを数独グリッドソルバーに渡すと、次のようになります。
MESudokuSolver *solvePuzzleOperation = [[MESudokuSolver alloc] initWithPuzzle: [grid numberArray]];
initWithPuzzle は次のように定義されています。
- (id)initWithPuzzle:(NSMutableArray *)puzzleArray {
if(self = [super init]) {
puzzle = [[NSMutableArray alloc] initWithArray: puzzleArray];
}
return self;
}
次に、パズルをプリミティブな int 配列に変換して解決し、パズル NSMutableArray に戻します。面白いのは、グリッドの NSMutableArray が解決策を持っていることです...つまり、MESudokuSolver 内でグリッドの配列が変更されていることを意味します。そこで調査を行ったところ、MESudokuSolver インスタンスに渡される配列へのポインターは、MESudokuSolver のパズル NSMutableArray とは異なります。奇妙ですよね?知っている。
さらに調査すると、異なるポインターを持つ配列内の NSNumbers へのポインターは実際には同じです。
StackOverflow さん、お願いします。