Einstellungen speichern und wieder abrufen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ja, static ist ein guter Weg um eine Variable sicher von allen Methoden deines Objekts aus zuverlässig zu verändern.
    Nein, die Benutzung einer static Variable ist in den meisten Fällen keine gute Idee.
    Du kapselst nichts, bekommst keine Änderungen von außen mit und hast unüberschaubar viele Abhängigkeiten.

    Vergleiche:

    C-Quellcode

    1. static uint counter = 0;
    2. - (void) tueDingEins() {
    3. // Hier mach ich zuerst was.
    4. counter++;
    5. // Hier noch was.
    6. counter++;
    7. // Oh, und hier.
    8. counter++;
    9. }
    10. - (void) tueDingZwei() {
    11. // Mal zurücksetzen, weil es geht.
    12. counter = 0;
    13. // Hier mach ich was und vertippe mich...
    14. counter--; // BÄM – alles kaputt. counter ist jetzt nämlich irgendwas.
    15. }
    Alles anzeigen

    Und

    C-Quellcode

    1. uint counter = 0;
    2. - (void)increaseCounter {
    3. counter++;
    4. }
    5. - (void)resetCounter {
    6. counter = 0;
    7. }
    8. - (void) tueDingEins {
    9. // Hier mach ich zuerst was.
    10. [self increaseCounter];
    11. // Hier noch was.
    12. [self increaseCounter];
    13. // Oh, und hier.
    14. [self increaseCounter];
    15. }
    16. - (void) tueDingZwei {
    17. // Mal zurücksetzen, weil es geht.
    18. [self resetCounter];
    19. // Hier mach ich was und vertippe mich...
    20. [self decreaseCounter]; // Compiler meckert, dass es die Methode gar nicht gibt. Kein 'BÄM' zur Laufzeit.
    21. }
    Alles anzeigen

    Der Mehraufwand hält sich in Grenzen, die gewonnenen Vorteile sind unbezahlbar.
    Generell solltest du jeden Request über ein und dasselbe Request-Instanzobjekt durchführen. Dann kann es seine ID nämlich schön selbst verwalten.
    (Wofür auch immer du diese brauchst.)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • SteveJ schrieb:

    Meinst du das ernst? Das ist sowohl für eine Instanzvariable als auch für eine Klassenvariable kein gute Code...

    Das war ja auch nur ein Beispiel für die Erklärung warum es so zumindest besser wäre als das Gezuppel mit ner Static. Im Kontext lesen ist hier durchaus erlaubt. ;)
    Ein konkreter Vorschlag geht eigentlich erst wenn man weis was der TE genau warum machen will und was das Ziel sein soll.
    [self setSignature:null];
    [[self postCount] increment];
  • Mike schrieb:

    SteveJ schrieb:

    Meinst du das ernst? Das ist sowohl für eine Instanzvariable als auch für eine Klassenvariable kein gute Code...

    Das war ja auch nur ein Beispiel für die Erklärung warum es so zumindest besser wäre als das Gezuppel mit ner Static. Im Kontext lesen ist hier durchaus erlaubt. ;)

    Danke. :)

    SteveJ schrieb:

    Das ist sowohl für eine Instanzvariable als auch für eine Klassenvariable kein gute Code...

    Klassenvariable? Spannend, seit wann gibt es denn sowas in Objective-C?

    Der Zusatz

    Marco Feltmann schrieb:

    Generell solltest du jeden Request über ein und dasselbe Request-Instanzobjekt durchführen. Dann kann es seine ID nämlich schön selbst verwalten.

    impliziert übrigens, dass ich die dargestellte Lösung ebenfalls nicht für das Mittel der Wahl halte. Nur halt für ein besseres Mittel als eine statische Variable.
    Ja, ich habe mir die Interface- und Implementierungsdefinitionen gespart.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • SteveJ schrieb:

    Marco Feltmann schrieb:


    Klassenvariable? Spannend, seit wann gibt es denn sowas in Objective-C?


    Hier von macmoonshine sehr gut erklärt.


    Man kann natürlich sowas wie Klassenvariablen einführen. Das heißt aber nicht, dass das in Objective C auch vorgesehen ist. Ich kann in Objective C auch Static-Variablen benutzen. Mir fällt nur kein Fall ein wo das auch sinnvoll ist. ;)
    Das einzige, das ich kenne in Objective C sind die Klassenmethoden, so Spässe wie z.B. initWithTitle aber Variablen?
    [self setSignature:null];
    [[self postCount] increment];
  • Diese Erklärung beschreibt nach meinem Verständnis eine globale Variable.
    Die ist dann nach Einbinden der .m überall im Code verfügbar.

    Etwas wie id var = [MyClassObject classVariable]; gibt es meines Wissens nicht. Demnach gibt es meines Wissens keine Klassenvariablen.
    Java kann etwas wie object var = MyClass.classVariable; Und nach Javas Aussage kann es Klassenvariablen.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P