La radice del problema è che int
e NSInteger
possono essere di dimensioni diverse. Quindi, stai assegnando un puntatore a un NSInteger
a una proprietà di tipo NSInteger*
, che va bene (ma inusuale). Tuttavia, stai rinunciando a tale valore come int
, che non corrisponde alle stesse dimensioni.
Tuttavia, penso che si possa anche essere confusi su come è necessario dichiarare una proprietà per contenere uno NSInteger
. NSInteger
è solo un semplice tipo intero, non un oggetto, quindi non è necessario utilizzare un puntatore per fare riferimento ad esso. Questo è doppiamente vero poiché sembra che tu stia dichiarando lo NSInteger
il cui indirizzo stai tenendo in pila, quindi il puntatore non sarà valido non appena termina il metodo in cui esegui l'assegnazione.
È molto meglio usare una semplice vecchia proprietà NSInteger
e non provare a utilizzare un puntatore qui. Fate questo invece:
@property (assign) NSInteger freeTrialCounter;
//...
NSInteger a = 2;
self.freeTrialCounter = a;
NSLog(@"Free Trial Counter: %ld", self.freeTrialCounter);
NSInteger b = self.freeTrialCounter;
NSLog(@"B: %ld", b);
Nota che ho cambiato anche il tipo di b
per NSInteger
modo che corrisponda al tipo di proprietà. Dal momento che non hanno necessariamente le stesse dimensioni, mescolando le due lattine (come hai visto) causano problemi. Allo stesso modo, ho modificato l'identificatore di formato da %d
a %ld
in modo che corrisponda alla dimensione a 64 bit di NSInteger
.
Che senso ha creare un puntatore a un 'int' come proprietà? Solo per scopi sperimentali o cosa? Questo non è qualcosa che sembra avere un'applicazione comune nel mondo reale – dandan78
Provato il tuo codice, B restituisce 2 per me. L'unico problema possibile che ho pensato è che NSInteger è in realtà un lungo e non un int. Significa che è a 64 bit e non a 32 bit. Hai la possibile perdita di dati quando esegui la conversione esplicita con 'b' – Yarneo
dandan78 e Yameo: guarda la mia risposta qui sotto all'aiuto di Caleb ... seguiva il consiglio di XCode "& (a)" e mi ha portato fuori strada. (Essendo nuovo in questa lingua, ho pensato che avrei dovuto ascoltare il consiglio dell'IDE ... ora lo so meglio!) Grazie per il vostro tempo e l'assistenza su questo. – user3643251