Domanda

Vengo da Ruby a Objective-C e continuo a farlo:

NSObject *foo;

@property (nonatomic,retain) NSObject *foo;

nel file .h, quindi nel file .m:

@synthesize foo;

in alto e

[foo release]

in dealloc.

Sono 4 i passaggi per aggiungere foo ! I programmatori Objective-C esperti eseguono manualmente tutti e quattro i passaggi ogni volta che desiderano aggiungere una nuova variabile di istanza a una classe? Mi sto perdendo un modo per rendere questo DRY?

È stato utile?

Soluzione

Questa è una preoccupazione comune anche in C ++ (raddoppio delle dichiarazioni, anche se è un po 'diverso). La risposta breve è che è così che viene costruita la lingua. Non è davvero contro DRY poiché ogni affermazione è unica e ha il suo scopo. Tuttavia è certamente molto dettagliato per gli standard di oggi.

Altri suggerimenti

Questa pagina http://pragprog.com/magazines / 2010-07 / non-abbastanza-nuovo-in-ios- , che puoi eliminare la dichiarazione variabile, riducendola a 2 ripetizioni :)

#import <UIKit/UIKit.h>
@interface MoveMeViewController : UIViewController {
}

@property(nonatomic, retain) IBOutlet UIImageView *imageView;
@end

Dato che hai detto che sei nuovo di Objective-C, voglio assicurarti di essere consapevole che non devi creare proprietà per ogni variabile di istanza nelle tue classi, e in effetti probabilmente non dovresti .

Le proprietà rappresentano un'interfaccia fornita dalla tua classe per altre classi. Questa interfaccia non coincide necessariamente con l'implementazione interna della classe. Nei casi in cui sono uguali, la sintassi delle proprietà dichiarate rende (relativamente) semplice esprimerlo.

Se le tue classi espongono la maggior parte del loro stato interno tramite le proprietà, potresti voler dare un'occhiata più da vicino al loro design e se potresti ottenere un design più semplice spostando le responsabilità.

Objective-C è uno strato molto sottile sopra C. A un livello basso, la maggior parte dell '"Obiettivo" roba si compila fino a puntatori di codice che vengono iniettati nel processo di compilazione C.

Hanno aggiunto il conteggio dei riferimenti (il più semplice sistema di raccolta dei rifiuti) ma per sua natura, è tutto fatto a mano, quindi il "Rilascio" chiamate.

Le versioni non iPhone hanno aggiunto un vero sistema di raccolta dei rifiuti, ma quelli non si ridimensionano troppo perché la liberazione non è così deterministica.

Mantieni i tuoi oggetti piccoli e focalizzati e la sintassi delle proprietà non dovrebbe essere molto invasiva.

Sì, ma spero che ogni giorno qualcuno realizzi uno script o qualcosa per XCode per automatizzare la cosa. (Preferisco anche

self.foo = nil 

nei miei dealloc)

Sarai in grado di aggirare la necessità di dichiarare sia la variabile di istanza che la proprietà una volta dimenticati i computer a 32 bit, poiché il runtime a 64 bit può sintetizzare le variabili di istanza. Ma non puoi essere completamente ASCIUTTO in una lingua in cui le cose devono essere dichiarate in un file di intestazione e implementate in un altro. La lingua richiede la duplicazione. L'unico modo per aggirare sarebbe quello di creare un metalinguaggio.

Puoi usare gli script per eliminare la duplicazione di digitare più volte la stessa variabile boilerplate, ma sarà ancora presente nel codice.

A proposito, non penso che l'istruzione @synthesize sia un'informazione duplicata. Nient'altro nel tuo codice indica quali accessori sono utilizzati per accedere alla proprietà.

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