2011-11-30 14 views
5

Mi sono imbattuto in ciò che segue e non riesco a capire perché funzioni. Per favore, puoi spiegare perché non ho bisogno di usare un puntatore prima di range?Informazioni sui puntatori in Objective-C

NSString *d = @"The quick brown fox"; 
NSRange range = [d rangeOfString:@"brown"]; 

risposta

9

NSString è un tipo di oggetto. Tutti i tipi di oggetto sono puntatori e non possono essere creati nello stack. NSRange è una C-struct. Le strutture possono essere create sullo stack e quindi non sono necessariamente tutti i puntatori.

Non c'è una buona guida per sapere quali sono gli oggetti e quali sono le strutture. Dovrai solo controllare per ogni tipo mentre vai avanti.

+0

+1 All'OP: ricorda che Objective-C è un super-set di C, che aggiunge funzionalità OOP. Ma anche se puoi programmare in modo OOP, devi comunque conoscere (almeno) alcune nozioni di base di C. – Macmade

+0

Una solida conoscenza delle allocazioni heap vs stack sarebbe molto utile qui. –

+1

Neppure uno solido ... Solo alcuni principi fondamentali potrebbero effettivamente aiutare, IMHO:) – Macmade