Domanda

Ho visto questo codice nella maggior parte del tempo. Qui ci sono due nomi di variabili definite e nell'attuazione esso sintetizzare assegnando. Che cosa è lo scopo di fare qualche cosa come questa? Come mantenere 2 nomi delle variabili indipendenti. E 'questo tipo di una convenzione?

Test.h

@interface Test {
  id<something> _variable1;
}

@property (nonatomic, retain)  id<something> variable2;

Test.m

@synthesize variable2 = _variable1
È stato utile?

Soluzione

C'è una sola variabile. La cosa di nome variable2 è in realtà una proprietà, che è fondamentalmente una scorciatoia sintattica di un metodo coppia get / set. Quando si definisce una proprietà, è possibile scrivere il get / set metodi esplicitamente ...

- (void)setVariable2:(id<something>)value {
    if (_variable1 != value) {
        [_variable1 release];
        _variable1 = [value retain];
    }
}

- (id<something>)variable2 {
    return _variable1;
}

... o utilizzare il costrutto @synthesize per generare automaticamente i metodi di cui sopra, risparmiando così un sacco di battitura monotona. (Emette anche il codice per rilasciare _variable1 sulla distruzione dell'oggetto, che non ho incluso qui.)

A volte, tuttavia, si potrebbe desiderare di implementare uno o l'altro di questi metodi in modo diverso sui valori predefiniti. In questo caso, si potrebbe scrivere il proprio. Si può anche mescolare insieme @synthesize e una versione personalizzata di solo uno dei metodi.

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