Come NSObject può contenere una NSString se NSString è un NSObject

1

Come può NSObject contenere una NSString se NSString è un NSObject

/* NSObject.h
Copyright (c) 1994-2012, Apple Inc. All rights reserved.
*/

(NSString *)description;

NSObject ha una proprietà denominata 'description' che è una NSString ma non NSString di NSObject? Com'è possibile che funzioni?

    
posta user2820167 14.03.2014 - 23:01
fonte

2 risposte

1

Non sono sicuro di aver compreso il problema, ma cercherò di spiegarlo. Si prega di commentare se sono lontano dal marchio.

NSObject ha NSString come proprietà.

NSString è una sottoclasse di NSObject .

Non ci sono problemi nel fare ciò. È piuttosto comune, in determinate circostanze, che una classe abbia una variabile del proprio tipo. Pensa ai singleton, per esempio. Queste sono classi che contengono una copia statica di se stessi per garantire che ne venga creata una sola.

La differenza è che, NSObject ha un NSString in modo che tutte le sue sottoclassi lo faranno. Ogni oggetto ha una proprietà description e è uno strumento utile per il debug, tra le altre cose. Quando si stampa un oggetto sulla console, chiamerà la proprietà description e la passerà come valore di stringa, proprio come toString() in altre lingue.

Potresti essere interessato al fatto che, questo significa che NSString ha una proprietà NSString . Questo è vero, ma richiamare la descrizione di NSString restituirà semplicemente i dati di stringa. Qualsiasi tentativo di chiamare ricorsivamente la descrizione produrrà lo stesso valore restituito.

Questo è perfettamente valido nelle regole di ereditarietà.

    
risposta data 20.03.2014 - 15:42
fonte
1

Una scatola può contenere un'altra scatola. Un nodo elenco collegato fa spesso riferimento a un altro nodo elenco, ad esempio per creare un elenco. La scatola al suo interno potrebbe essere vuota (nulla). Rompendo leggermente il confronto, nel codice, la scatola all'interno può specificare se stessa come la scatola al suo interno (un riferimento in Java). Quindi non è davvero un problema. Sarebbe solo un problema se ogni oggetto avesse una stringa diversa, non nulla, poiché sarebbe infinita.

    
risposta data 20.03.2014 - 16:39
fonte

Leggi altre domande sui tag