2009-05-02 6 views
10

Essendo uno sviluppatore PHP piuttosto esperto e con una discreta conoscenza di C (ho scritto un esperimento di calcolo distribuito con 16 dei miei microcontrollori NEC di mio padre), mi piacerebbe passare a Objective-C e Cocoa, con l'obiettivo di integrare le app Mac/iPhone con alcuni dei miei progetti PHP.Da PHP a Objective-C

Passando attraverso il libro "Cocoa Programming For Mac OS X" di Arron Hiilegass, mi sento un po 'frustrato. Sono in grado di lavorare gli esempi, ma non spiega esattamente perché sta usando una classe in quel modo (NSNumber invece di int o double per esempio).

Sto cercando un buon libro/libri per appoggiare prima Objective-C. La mia domanda è, quale sarebbe un buon libro? Sto guardando "Programming In Objective-C 2.0" e sembra abbastanza decente. Dove andrei da lì? Penso che dovrei quindi riprendere il mio libro di Cocoa.

Inoltre, ci sono risorse su Internet che potrebbero aiutare nella transizione da PHP a Objective-C? So che PHP è un linguaggio di scripting generico, quindi ha le sue differenze. Ci sono alcune cose che non hanno senso con Obj-C e Cocoa, perché non posso inserire interi in un NSMutableArray?

In ogni caso. Grazie per l'aiuto! (Ho solo 14 anni, quindi agisci con me se ho commesso qualche errore nella mia Q.)

+2

Non è davvero una risposta alla domanda del libro in sé, ma è abbastanza normale avere domande (come "Perché usare X invece di Y?") Quando stai imparando qualcosa di nuovo. Sentiti libero di chiedere loro su Stack Overflow. In questo modo altre persone che hanno le stesse domande possono trovarle già fatte e risposte. – Chuck

+0

Grazie per l'aiuto di tutti, vorrei poter scegliere più di 1 risposta. Questa è una grande comunità, mentre imparando Obj-C, sto provando in modo provocatorio e riprendo le sezioni di PHP. –

risposta

8

Ho appena eseguito "Programmazione in Objective-C 2.0" da solo, ed è abbastanza buono. Lo raccomanderei, specialmente se non hai mai usato C (o se l'hai dimenticato, come me).

Tuttavia, Apple ha davvero una documentazione eccellente. Se non ti dispiace leggere online, inizierei con la loro pagina Getting Started with Cocoa.

+0

"Il linguaggio di programmazione Objective-C" di Apple collegato da lì descrive completamente Objective-C e include esempi di ciò che sta discutendo. Un po 'secco, ma molto informativo. – Chuck

+0

Ho passato più di un libro in B & N, lo sto ordinando ora, sembra un grande libro che spiega le cose molto chiaramente. Sono più un tipo "Dimmi perché". –

1

Inoltre, per rispondere alle vostre domande:

Objective-C è un linguaggio orientato agli oggetti costruiti come un'estensione sulla parte superiore del C.

quanto tale, esso fornisce entrambi i tipi primitivi (come int e doppio) e oggetti.

NSNumber è una classe Objective-C che rappresenta un numero PIÙ un numero di operazioni su quel numero (metodi). Il vantaggio di utilizzare un NSNumber su un tipo primitivo numerico è che può essere utilizzato in modo orientato agli oggetti (è possibile inviare messaggi ad esso, è possibile estenderne le funzionalità con "protocolli", è possibile ereditare da esso, è possibile passare in un metodo che si aspetta un oggetto, ecc.).

Come per NSMutableArray, questa è una classe che fornisce funzionalità di tipo array. È progettato per funzionare con i tipi di oggetto Objective-C (è un contenitore di oggetti di tipo NSObject e oggetti che li ereditano) e questo è il motivo per cui non può contenere un numero intero. Tuttavia, può contenere un NSInteger che è una classe C obiettivo che rappresenta un numero intero.

+0

Grazie! Stavo lavorando a un semplice strumento di base per calcolare la deviazione assoluta media. Non sapevo che esistesse un NSInteger, penso che il download della documentazione sia stato interrotto, quindi potrei avere solo la metà. Grazie! –

+0

NSInteger non è una classe. È un alias per un numero intero di dimensioni appropriato per il proprio ambiente (32 bit vs 64 bit). È possibile trovare quanto segue in NSObjCRuntime.h sulla riga 106: #if __LP64__ || NS_BUILD_32_LIKE_64 typedef long NSInteger; typedef unsigned long NSUInteger; #else typedef int NSInteger; typedef unsigned int NSUInteger; #endif –

7

sono in grado di lavorare gli esempi, ma non spiega esattamente perché sta usando una classe in quel modo (NSNumber invece di int o doppia per esempio) ...

Ci sono alcune cose che non hanno senso con Obj-C e Cocoa, perché non posso inserire interi in un NSMutableArray?

NSNumber è un tipo molto più utile di un tipo primitivo, come int o double, come viene spesso utilizzato in combinazione con altri oggetti si incorrerà in come si programma in Cocoa.

Ad esempio, al fine di confezionare un numero come un valore in un array ridimensionabile (come un NSMutableArray) oppure un array associativo (un'istanza di NSDictionary), è necessario ruotare il numero primitivo (int, double, etc.) in un serializable o oggetto archiviabile - un NSNumber.

primitive non possono essere serializzati, a differenza di un NSNumber, perché primitive non sono nel set di base di tipo "core" (Fondazione NSNumber, NSArray, NSString, etc.) che Apple ha lavorato duramente per mettere a vostra disposizione .

Inoltre, utilizzando NSNumber si ottengono anche molti metodi di convenienza gratuiti gratuitamente: è possibile convertire rapidamente il numero in una stringa, ad esempio, semplicemente digitando [myNumber stringValue].

Oppure, se si sta trattando la vostra NSNumber come il prezzo di qualcosa ("$ 1.23"), si può applicare un NSNumberFormatter per assicurarsi che le operazioni sul numero danno risultati che hanno il formato che ci si aspetterebbe (ad esempio, se aggiungi due valori di prezzo, ti aspetteresti di ottenere un valore in valuta in cambio).

Questo non vuol dire che non sia possibile o non debba utilizzare le variabili int o double. Ma in molti casi, troverai un NSNumber un'opzione migliore, in quanto puoi scrivere meno codice e ottenere molte funzionalità per "gratis".

+0

Grazie per la spiegazione! Sono abbastanza sicuro che non ci sia, ma c'è un modo semplice e veloce per creare un nuovo oggetto NSNumber? Inoltre, so che NSNumber non è mutabile, esiste una versione? Forse NSInteger? (Sto scaricando di nuovo la libreria di riferimento principale in questo momento) –

+0

NSNumber * myNumber = [NSNumber numberWithInt: 5]; –

+0

Questo non è veramente accurato. La serializzazione non ha nulla a che fare con il valore di un valore in un NSArray. Il motivo per cui un int non può andare in un NSArray è perché un int non è un oggetto e NSArray funziona solo con gli oggetti (indicati con initWithObjects: e objectAtIndex: accetta gli argomenti di tipo "id" - id è diverso da int) . Questo è il motivo per cui NSNumber esiste: fornisce un oggetto per racchiudere un int o un float in modo che possano essere memorizzati in posizioni che si aspettano oggetti. Inoltre non direi che NSNumber è più utile di int - prova a fare matematica con NSNumber qualche volta. – Chuck

0

ero in una barca simile (PHP trasferirsi in Objective-C) e ho trovato il processo migliore è stato quello di saltare in un progetto. Ho seguito anche il libro Hillegass ed è stato un buon inizio, ma l'unico modo per conoscere una lingua è di cavarsela con un obiettivo chiaro.

È doloroso ma funziona. Caffè, API e kleenex.

EDIT: Ho appena letto l'ultima parte del tuo post e ho visto che eri 14. Forse accendere il caffè con Coca-Cola :)

+0

oh dio, amo la coca. –

+0

Non dimenticare l'ibuprofene. Soprattutto quando arrivi al disegno al quarzo. – willc2

5

Nella mia esperienza, ho trovato i documenti Internet di essere abbastanza utile per l'apprendimento Obj-C e CocoaTouch. La mia progressione andato qualcosa di simile:

1) Guarda i video di Apple Dev su iTunes (sono gratuiti).

2) Leggere Getting Started, iPhone Application Programming Guide.

3) Leggere OOP In Obj-C.

4) Altre informazioni: Cocoa Fundamentals, Objective-C Primer, Cocoa Practices.

5) Fare qualche tutorial semplici.

IMO: Tutte le informazioni che vi serve è su Apple Dev: sito iPhone. Risparmia i tuoi soldi e non comprare libri. Se non capisci "PERCHÉ" qualcosa è stato fatto in una delle guide o esercitazioni, fai un riferimento incrociato immediatamente con altre fonti di Google.

Devi tenere presente che la curva di apprendimento qui è piuttosto grande. Era per me e sto studiando cose del genere ogni giorno al college. Quindi, seguilo e leggi in modo intelligente (materiale che sai di skim).Quello che vedo in me stesso è se capisco come funziona l'iPhone e conosco il flusso di dati, quindi programmare per esso è principalmente un problema di sintassi.

PHP è molto diverso da Objective-C. Inoltre, il modo in cui i problemi di programmazione vengono risolti in PHP nel contesto di Internet è molto diverso dal modo in cui i problemi di programmazione vengono risolti in Obj-C, nel contesto dell'iPhone. Per questo motivo, vuoi avvicinarti all'iPhone da una nuova prospettiva e da studente/studente. Prenditi il ​​tuo tempo e concentrati sulla programmazione orientata agli oggetti e sulle migliori pratiche. Questo ti benedirà per gli anni a venire.

-Buffalo

0

Il mio tutorial Objective-C preferito se vieni da qualsiasi parte è il corso iTunesU di Stanford su programmazione iOS. Il professore mette davvero le cose in prospettiva dagli altri libri e tutorial online.