Self e [super init]

di il
22 risposte

22 Risposte - Pagina 2

  • Re: Self e [super init]

    Non capisco una cosa,ora apprescindere dal self o super, ma se io ho un metodo "primo metodo" in una classe A , poi ho una classe B che eredita la classe A e riscrivo il "primo metodo", quando richiamo il metodo "primo metodo" della classe B, a me cosa importa cosa succede al metodo "primo metodo" della classe A, cioè io sto richiamando il "primo metodo" della classe B. Capisci cosa intendo?
    Stesso fatto della self, quando ad esempio ho:
    
    
    rettangolo*x=[[rettangolo alloc]init]
    
    
    se la init l'ho "modificata", quando richiamo la init stessa richiamo la init della classe rettangolo e non quella della classe NSobject, cosa mi importa se la init della classe NSobject diventa nil?

    E poi un'altra cosa, ma se io richiamo la init della classe rettangolo, come fa la init della classe NSobject ad assumere valore se non ho richiamato lei, ma la init della classe rettangolo?
    Spero di essere stato chiaro sul mio preciso dubbio
  • Re: Self e [super init]

    Forse ho capito cosa chiedi. Richiamare la init della superclasse serve poiché in questo modo fai inizializzare alla superclasse quella parte dell'oggetto che le compete. Se hai una classe Punto2D che con una init che prende in ingresso 2 parametri, ovvero le 2 coordinate, ed hai una classe Punto3D (che estende quella di prima) con una init che prende in ingresso i 3 parametri delle coordinate allora potrai richiamare [suPer init] con i 2 parametri in modo che la superclasse inizializzi quella parte dell'oggetto che le compete.
  • Re: Self e [super init]

    Scsa ma continuo a non capire( non mi prendere a parolacce) , se io riscrivo la classe 2d con una che accetta 3 Parametri(le 3 coordinate) io la init della classe 2d non la tocco proprio, quindi richiamando la init della classe 3d( con 3 parametri) inizializzo anche le due coordinate piu la terza
  • Re: Self e [super init]

    Si puoi farlo ma in questo modo ogni volta devi creare tuto da capo e non sfrutti l'ereditarietà! Finche si tratta di metodi semplici puoi anche farlo, ma pensa di riscrivere dal nulla Un metodo di inizializzazione per una finestra grafica. In quel caso ti conviene richiamare l'init della superclasse.
    Per rimanere con l'esempio del punto potresti avere
    
    //classe Punto2D
    -(id) initWithX:(int) x andY:(int) y;
    
    //classe Punto3D
    -(id) initWithX:(int) x andY:(int) y andZ:(int) z
    {
        self = [super initWithX:x andY:y];
        If(self)
             self.z = z;
         return self;
    }
    
    Scusa per eventuali errori ma sono col cellulare
  • Re: Self e [super init]

    A ecco,ora mi è molto più chiaro ti ringrazio.
    Se posso ancora romperti ho due domande da farti:

    1)Cosa rappresenta il tipo ID ?
    2)Perché prima hai detto che per la classe NSobject è inutile il discorso che facevamo prima?Cosa ha la classe NSobject che fa rendere self=[super init] inutile?

    Ti ringrazio ancora per la disponibilità e pazienza
  • Re: Self e [super init]

    Tranquillo non ti preoccupare
    Il tipo id è un puntatore a un oggetto, indipendentemente dalla classe. Di preciso non ricordo quale sia il typedef di id, però so che si può usare per riferire un qualsiasi oggetto.
    Per il discorso di classi "figlie" di NSObject richiamare il self = [super init] non è utilissimo poiché la init di NSObject mi sa che non fa praticamente niente (ma non sono informato, lo so per "sentito dire" quindi non fidarti troppo :p ). In ogni caso è buona regola richiamarlo, quindi conviene usarlo
  • Re: Self e [super init]

    A ecco, quindi è solo una cosa di sicurezza e niente di più.io ti ringrazio ancora per la disponibilità
    Ciao della!
  • Re: Self e [super init]

    Di niente
Devi accedere o registrarti per scrivere nel forum
22 risposte