Domanda

Che cosa significa la seguente riga effettivamente fare?

string = @"Some text";

Supponendo che "stringa" viene dichiarata thusly nell'intestazione:

NSString *string;

Che cosa significa il "=" in realtà fare qui? Che cosa fa contare "stringa" 's di riferimento? In particolare, partendo dal presupposto che per qualche ragione "stringa" non è altrimenti assegnata, ne ha bisogno di essere liberato?

Grazie!

È stato utile?

Soluzione

L'assegnazione è proprio questo. Il puntatore string è fondamentalmente un'etichetta che indica l'indirizzo specifico in memoria. dichiarazione Riassegnazione ricorda che l'etichetta a un altro indirizzo in memoria!

Non cambia il conteggio di riferimento o fare qualcosa oltre che in Objective-C. È necessario mantenere una conta il riferimento da soli, se si esegue in un ambiente non-garbage-collection:

[string release];
string = [@"Some text" retain];

Tuttavia, stringhe letterali non hanno bisogno di essere gestito, in quanto vengono assegnati staticamente e non arrivano mai deallocate! Quindi i metodi release e retain sono solo NOOPs (cioè nessuna operazione). Si può tranquillamente omettere.

Altri suggerimenti

  

Che cosa significa la seguente riga effettivamente fare?

string = @"Some text";
     

Supponendo che "stringa" viene dichiarata thusly nell'intestazione:

NSString *string;
     

Che cosa significa il "=" in realtà fare qui? Che cosa fa di conteggio dei riferimenti "stringa" 's?

string non è una stringa.

string è, infatti, non qualsiasi altro tipo di oggetto cacao, sia.

string è una variabile, che hai creato per contenere un'istanza di NSString. L'operatore di assegnazione mette qualcosa in una variabile *. Nel tuo esempio sopra, si crea una stringa letterale, e metti che nella variabile.

Poiché string è una variabile, non un oggetto di cacao, non ha alcun valore di riferimento.

L'assegnazione di un oggetto da qualche parte possono di estendere la vita dell'oggetto nel codice garbage collection (solo su Mac). Vedere la Guida alla programmazione di gestione della memoria per Cocoa per maggiori dettagli .

* O una matrice C. Non confondere questi con gli array di cacao; non sono intercambiabili, e non è possibile utilizzare l'operatore di assegnazione per mettere le cose in una collezione di cacao (non in Objective-C, in ogni caso).

Quando si utilizza un valore letterale come in questo caso, è solo zucchero sintattico per creare rapidamente un oggetto NSString. Una volta creato, l'oggetto si comporta proprio come un altro di loro. La differenza qui è che la stringa è compilato nel programma invece di creare in modo dinamico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top