2013-02-28 6 views
5

Ich bin ziemlich neu in Objective C und iOS, derzeit versuche App Entwicklung mit dem iOS 6 SDK zu lernen. Ein Konzept, um das ich mich wirklich nicht kümmern kann, ist der Unterschied zwischen "_variable" und "self.variable", wenn auf die .m-Datei zugegriffen wird. Sind sie gleich? Oder anders?Was ist der Unterschied zwischen _variable & self.variable in Objective-C?

Es folgt eine einfache Probe

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 

So gibt es einen Unterschied in den obigen Ausführungen eine Variable zu setzen? Variable "meinName" ist öffentlich, während "ein andererName" privat ist.

Würde ich sehr schätzen irgendwelche Eingaben. Vielen Dank!

+2

möglich Duplikat [Differenz zwischen self.ivar und ivar?] (http://stackoverflow.com/q/4142177/), [Differenz zwischen dem selbst und normalen Variable] (http://stackoverflow.com/q/ 536388 /), [Eigenschaften und Zugriffsmethoden] (http://stackoverflow.com/q/6085080/), [Ivar-Eigenschaft, Zugriff über Self?] (Http://Stackoverflow.com/q/4088801/), [Wann man auf Eigenschaften mit self zugreift] (http://stackoverflow.com/q/4271657/), [Was ist der (Stil-) Unterschied zwischen "self.foo" und "foo" bei der Verwendung synthetisierter Getter?] (Http: //stackoverflow.com/q/3494157/) und [viele weitere] (http://stackoverflow.com/search?q=%5Bobjc%5D+self.ivar) –

+2

Eigentlich ist diese Frage kein Duplikat. Als Anfänger habe ich nach dem Unterschied zwischen Variable und Selbst gesucht. Ich würde die Fragen ignorieren, die den Unterstrich nicht verwenden, also war dies der einzige für mich. Aber, @Josh, dein Kommentar hat mir trotzdem geholfen, zu verstehen, dass sie das Gleiche sind. – Arjan

+0

Unterstriche ändern die Art oder Funktionalität von Ivars nicht im Geringsten: [Wie funktioniert ein Unterstrich vor einer Variablen in einer Cocoa/ObjC-Klasse?] (Http://stackoverflow.com/q/822487) –

Antwort

13

Der Unterschied ist, dass:

die Variablennamen mit _ Instanzvariablen sind.

self.variable ist eine Getter-Methode auf dem Objekt aufgerufen.

In Ihrem Beispiel werden die Instanzvariablen automatisch generiert, und Sie müssen auch nicht Ihre Eigenschaften synthetisieren.

Die wirklich wichtigen Unterschied in Ihrem Beispiel ins Spiel kommt, wenn Sie nicht ARC-

self.variable verwenden wird für Sie ein Objekt behalten, wenn Sie die Eigenschaft mit retain oder strong _variable markiert nicht bei allen Speicherverwaltung Adresse

+0

Verwendung Klammern in Ihrem Beispiel ist möglicherweise verwirrend für einen Anfänger! Ich bleibe bei 'self.variableName' – jrturton

+1

Können Sie Ihren letzten Satz erklären? "' self.variable "wird ein Objekt für Sie behalten, wenn Sie die Eigenschaft mit' retain' oder 'strong'' _variable' markieren, die Speicherverwaltung überhaupt nicht adressiert. " – alternatiph

Verwandte Themen