Objective-C - Come implementare un array di puntatori in una dichiarazione di metodo
-
13-09-2019 - |
Domanda
Ok, se si dà un'occhiata ai miei due post precedenti (link # 2 in particolare), vorrei fare una domanda aggiuntiva appartenenti allo stesso codice. In una dichiarazione di metodo, Sono voler definire uno dei parametri come un puntatore a un array di puntatori, che indicano feat_data. Sono una specie di in perdita di dove andare e cosa fare se non mettere (NSMutableArray *) featDataArray nella dichiarazione come qui sotto e accedere a ogni oggetto attraverso un altro puntatore di tipo feat_data. A proposito, mi dispiace da tante domande. Non riesco a trovare alcune delle cose come questa nel libro che sto usando o forse sto cercando nel posto sbagliato?
-(void)someName:(NSMutableArray*)featDataArray;
feat_data *featDataPtr = [[feat_data alloc] init];
featDataPtr = [featDataArray objectAtIndex:0];
Soluzione
La vostra dichiarazione osserva benissimo. "NSMutableArray *" è un tipo appropriato per il parametro. (Objective-C non ha farmaci generici in modo non è possibile dichiarare nulla di quello che c'è dentro la matrice.)
Un problema che vedo nel codice è che si alloca un oggetto senza motivo e poi buttare via il puntatore (che perde così la memoria).
Non so che cosa è che si sta cercando di fare, per cui qui sono alcune cose che si possono fare con un NSMutableArray:
- (void)someName:(NSMutableArray *)featDataArray {
feat_data *featDataPtr = [[feat_data alloc] init];
[featDataArray addObject:featDataPtr]; // add an object to the end
[featDataPtr release];
feat_data *featDataPtr2 = [[feat_data alloc] init];
[featDataArray replaceObjectAtIndex:0 withObject:featDataPtr2]; // replace an existing entry
[featDataPtr2 release];
feat_data *featDataPtr3 = [featDataArray objectAtIndex:0]; // get the element at a certain index
// do stuff with featDataPtr3
}