Hallo,
ich bin gerade bei der Programmierung für Mac OS X. Dabei hätte ich mal zwei Fragen, warum folgender Code funktioniert, obwohl er meiner Meinung nach den 2. NSLog nicht machen dürfte.
Ich arbeite übrigens ohne ARC.
1)
Alles anzeigen
So wie ich das verstanden habe, gibt dealloc das Objekt ohne Rücksicht auf Verluste wieder Frei. Also unabhängig von retain-Zähler. Somit dürfte doch der 2. NSLog nicht mehr funktionieren.
2) Mit jedem mal wo ich das Objekt verwende, wird der retain-Zähler ja um 1 erhöht. Wenn ich schreibe [meinObjekt release] setze ich den retain-Zähler ja um 1 zurück.
Dies sollte ich ja nach jeder Verwendung des Objektes machen. Wenn retain-Zähler == 0 wir das Objekt ja gelöscht.
Jetzt aber meine Frage:
Wenn ich das Objekt das erste mal erstelle hat der Retain-Zähler ja den wert von 1.
Wenn ich jetzt das objekt 10 x verwende und 10 x danach den release-Befehl ausführe hat der retain-Zähler ja dann den Wert 1.
Somit komme ich ja nur dann auf 0, wenn ich irgendwo 2x hintereinander den relese-Befehl ausführe.
ich bin gerade bei der Programmierung für Mac OS X. Dabei hätte ich mal zwei Fragen, warum folgender Code funktioniert, obwohl er meiner Meinung nach den 2. NSLog nicht machen dürfte.
Ich arbeite übrigens ohne ARC.
1)
Quellcode
- #import <Foundation/Foundation.h>
- #import "Zinsrechner.h"
- int main(int argc, const char * argv[])
- {
- @autoreleasepool {
- Zinsrechner *meinZinsrechner = [[Zinsrechner alloc] init];
- double kontostand = 100;
- double zinssatz = 5.0;
- double laufzeit = 5;
- double d = [meinZinsrechner berechneZinsen:kontostand : zinssatz : laufzeit];
- NSLog(@"Kontostand %.2f", d);
- [meinZinsrechner dealloc]; //Gibt den Speicher vom Objekt meinZinsrechner wieder frei.
- double x = [meinZinsrechner berechneZinsen:100 :4.00 :5];
- NSLog(@"%.2f", x);
- }
- return 0;
- }
So wie ich das verstanden habe, gibt dealloc das Objekt ohne Rücksicht auf Verluste wieder Frei. Also unabhängig von retain-Zähler. Somit dürfte doch der 2. NSLog nicht mehr funktionieren.
2) Mit jedem mal wo ich das Objekt verwende, wird der retain-Zähler ja um 1 erhöht. Wenn ich schreibe [meinObjekt release] setze ich den retain-Zähler ja um 1 zurück.
Dies sollte ich ja nach jeder Verwendung des Objektes machen. Wenn retain-Zähler == 0 wir das Objekt ja gelöscht.
Jetzt aber meine Frage:
Wenn ich das Objekt das erste mal erstelle hat der Retain-Zähler ja den wert von 1.
Wenn ich jetzt das objekt 10 x verwende und 10 x danach den release-Befehl ausführe hat der retain-Zähler ja dann den Wert 1.
Somit komme ich ja nur dann auf 0, wenn ich irgendwo 2x hintereinander den relese-Befehl ausführe.