Qual è la ragione che sta dietro dando sottolineatura nei file di intestazione private di mela

StackOverflow https://stackoverflow.com/questions/1829755

  •  11-09-2019
  •  | 
  •  

Domanda

Ho visto molti .h (API Private) di mela. La maggior parte delle variabili / strutture / enumerazioni / classi hanno _ come prefisso.

#import <Foundation/NSValue.h>
#import <Foundation/NSObjCRuntime.h>

@class NSString;

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

La mia domanda è,

Cosa c'è ragione di dare sottolineano & typedef di nuovo con una corretta uno?

È stato utile?

Soluzione

Objective-C ha un nome spazio aperto a livello globale. E 'importante che tutti i nomi siano univoci. Oltre alle ragioni esposte in precedenza, Apple si riserva tutti sottolineano i nomi per se stessa. Questo aiuterà a prevenire le collisioni accidentali di nomi.

Altri suggerimenti

E 'generalmente usato come una bandiera che l'entità in questione è privato e / o interno e non deve essere utilizzato nel codice direttamente. Credo che nelle vecchie versioni di C non si poteva dichiarare una struct anonimo e quindi bisogno di un nome di "filler" per mettere lì.

Credo che sia al fine di creare un opaca . Questo limita i clienti del tipo di accedere dettagli interni senza utilizzare l'interfaccia fornita. È quindi possibile utilizzare la struct attraverso un opaca puntatore , e possibile dichiarare array, variabili, ecc di il tipo senza preoccuparsi l'implementazione interna, assicurando che il software non avrà bisogno di essere ricompilati se Apple decide di cambiare il codice dietro tali tipi.

Per dichiarare strutture, lo stile di dichiarare typedef struct _name {...} name risale ai giorni di GCC 2.0 o giù di lì, quando come si è detto sopra, non si poteva avere una struct anonimo.

Per i nomi delle Ivars, il singolo sottolineatura è una convenzione di codifica interna di Apple, ed ufficialmente parlando Apple si riserva tutti i nomi che iniziano con singoli sottolineatura. Se i nomi di Apple tutti i loro Ivars in questo modo, quindi si non entrare in collisione con uno qualsiasi dei loro nomi se non lo fai.

Purtroppo, molti progetti di codice di esempio sono stati pubblicati sul sito web degli sviluppatori di Apple senza passare attraverso il codice e la rimozione di sottolineature importanti sui nomi IVAR. Questo accade per due motivi, il principale è che gli sviluppatori che lavorano all'interno di Apple, hanno l'abitudine di nominare loro variabili in questo modo, e l'altra ragione è che le persone che esaminano progetti di codice di esempio, non hanno davvero curato molto circa l'esecuzione di una codifica standard stile.

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