2013-02-28 3 views
5

Sono abbastanza nuovo per Objective C e iOS, attualmente sto cercando di imparare lo sviluppo di app utilizzando l'SDK di iOS 6. Un concetto che non riesco davvero a comprendere è la differenza tra "_variable" e "self.variable" quando si accede al file .m. Sono gli stessi? O diverso?Qual è la differenza tra _variable e self.variable in Objective-C?

seguito è un semplice campione di

MyClass.h

#import <Foundation/Foundation.h> 

@interface MyClass : NSObject 
@property (strong, nonatomic) NSString *myName; 
@end 

MyClass.m

#import "MyClass.h" 

@interface MyClass() 
@property (nonatomic, strong) NSString *anotherName; 
@end 

@implementation MyClass 
- (void) myFunction { 
    _myName = @"Ares"; 
    self.myName = @"Ares"; 

    _anotherName = @"Michael"; 
    self.anotherName = @"Michael"; 
} 
@end 

Quindi c'è una differenza nelle implementazioni di cui sopra per impostare una variabile? La variabile "myName" è pubblica mentre "anotherName" è privata.

Apprezzerebbe molto qualsiasi input. Grazie!

+2

possibile duplicato di [Differenza tra self.ivar e ivar?] (Http://stackoverflow.com/q/4142177/), [Differenza tra auto e variabile normale] (http://stackoverflow.com/q/ 536388 /), [Proprietà e accessorie] (http://stackoverflow.com/q/6085080/), [proprietà Ivar, accesso via self?] (Http://stackoverflow.com/q/4088801/), [Quando accedere alle proprietà con self] (http://stackoverflow.com/q/4271657/), [Qual è la differenza (stile) tra "self.foo" e "foo" quando si utilizzano getter sintetizzati?] (Http: //stackoverflow.com/q/3494157/) e [molti altri] (http://stackoverflow.com/search?q=%5Bobjc%5D+self.ivar) –

+2

In realtà questa domanda non è un duplicato. Come principiante, ho cercato la differenza tra variabile e auto variabile. Ignorerei le domande che non usano il carattere di sottolineatura, quindi questo era l'unico per me. Ma, @Josh, il tuo commento mi ha aiutato comunque, a capire che sono la stessa cosa. – Arjan

+0

I caratteri di sottolineatura non modificano minimamente la natura o la funzionalità di ivars: [Come funziona una sottolineatura di fronte a una variabile in una classe Cocoa/ObjC?] (Http://stackoverflow.com/q/822487) –

risposta

13

La differenza è che:

i nomi delle variabili con _ sono variabili di istanza.

self.variable sta chiamando un metodo getter sul proprio oggetto.

Nell'esempio, le variabili di istanza vengono generate automaticamente e non è necessario nemmeno sintetizzare le proprietà.

La vera differenza importante nel tuo esempio entra in gioco se non si utilizza ARC-

self.variable manterrà un oggetto per voi, se si contrassegna la proprietà con retain o strong _variable non affronta la gestione della memoria a tutti

+0

Utilizzo le parentesi nel tuo esempio sono potenzialmente confuse per un principiante! Rimanerei con 'self.variableName' – jrturton

+1

Puoi spiegare la tua ultima frase? "' self.variable' conserverà un oggetto per te se contrassegni la proprietà con 'retain' o' strong' '_variable' non indirizza affatto la gestione della memoria" – alternatiph

Problemi correlati