Domanda

Una domanda sulla quale mi tormentavo da un po'.Sono principalmente uno sviluppatore .net che si diletta in Objective-C per iPhone e Mac.

Come si fa a inviare "set di dati" tra metodi in object-c.Ad esempio in C# è possibile popolare una classe personalizzata con dati e passarla in un elenco di tipo classe personalizzata.Ad esempio, se avessi una lezione per i clienti, faresti semplicemente qualcosa del tipo:

List<Customer> customers = DataLayer.GetAllCustomers();

L'unico modo in cui posso vedere come ciò potrebbe essere fatto in obj-c sarebbe popolare un NSArray con oggetti personalizzati?È questo un modo efficiente per fare le cose?Altri consigli?Sto utilizzando sqlite come database/dati che voglio restituire.

È stato utile?

Soluzione

Sei sulla strada giusta.

Le classi di raccolta di Cocoa, che hanno tutte varianti mutabili e immutabili, sono:

  • NSArray:ordinato, può contenere un oggetto più volte
  • Dizionario NS:non ordinato, mappato da chiavi a valori, le chiavi vengono copiate
  • NSSet:non ordinato, può contenere un oggetto una sola volta
  • NSCountedSet:non ordinato, può contenere un oggetto più volte

Le varianti immutabili aiutano molto con l'efficienza.Il modello standard per le funzioni di accesso di classi che hanno varianti mutabili è copiare anziché conservare.Questo è codificato nel @property meccanismo, utilizzando il copy attributo sulla proprietà:

// Department.h
@interface Department : NSObject
@property (readwrite, copy) NSSet *employees;
@end

Ciò significa che se passi un array mutabile a qualcosa che accetta un array, verrà copiato e se lo passi a qualcos'altro, verrà copiato di nuovo.Il trucco è però che "copiare" un oggetto immutabile in realtà lo conserva, quindi subisci un colpo solo per quella prima copia.Tu probabilmente Volere per fare comunque una copia la prima volta in modo da non passare un array mutabile a qualcos'altro, quindi mutarlo dietro la schiena di qualunque cosa tu lo abbia passato.

Per Cocoa su Mac OS X, ti incoraggio vivamente a dare un'occhiata anche a Core Data.È un'alternativa al modello "set di dati" a cui potresti essere abituato da .NET/ADO/etc.Con Core Data, non "ottieni tutti i clienti" e poi passi la raccolta in giro.Invece effettui una query per i clienti che ti interessano e mentre attraversi le relazioni degli oggetti per i quali hai richiesto, altri oggetti verranno inseriti automaticamente per te.

Core Data ti offre anche funzionalità come la modellazione visiva delle tue entità, la generazione automatica di getter e setter di proprietà, il controllo dettagliato sulla migrazione da una versione dello schema a un'altra e così via.

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