Hallo,
da ich an einer Cocoa-Applikation für Mac OS arbeite, habe ich mir gedacht, ich kann den Vorzug des Garbage Collectors benutzen und muss mich dann nicht um das Memory Management kümmern. Leider bin ich jetzt doch auf ein Problem gestoßen: Ich hatte immer mal wieder Programmabstürze und habe mich gefragt, woran das liegen könnte. Dabei habe ich nun herausgefunden, dass eine Methode auf eine Instanzvariable zugreift, welche aber auf einmal leer ist (was ich im Debugger sehen konnte). Der Garbage Collector hat also in der Zwischenzeit einfach meine Variable freigegeben/überschrieben/gelöscht (???). Testweise habe ich nun mal in der Methode, in der ich der Variable den benötigten Wert zuweise, ein retain gemacht. Nun läuft das Programm ohne Absturz und die Variable hat in der auslesenden Methode auch den richtigen Wert.
Nun bin ich aber etwas verwirrt: Wieso kommt der blöde Garbage Collector auf die bescheuerte Idee, einfach meine Instanzvariablen freizugeben? Das macht er scheinbar nur, wenn ich die Variable eine Zeit lang nicht mehr anrühre. Im Apple-Guide zum Gargabe Collector steht daher auch, dass man dies mit retain verhindern kann. Woher soll ich nun aber wissen, wann es für den Garbage Collector Zeit ist, meine Variable freizugeben? Damit habe ich ja mehr oder weniger immer das Risiko, wenn zwischendurch mal etwas länger dauert. Kann ich vllt. die Instanzvariablen so einstellen, dass sie vom Garbage Collector nicht angerührt werden?
									
									
								da ich an einer Cocoa-Applikation für Mac OS arbeite, habe ich mir gedacht, ich kann den Vorzug des Garbage Collectors benutzen und muss mich dann nicht um das Memory Management kümmern. Leider bin ich jetzt doch auf ein Problem gestoßen: Ich hatte immer mal wieder Programmabstürze und habe mich gefragt, woran das liegen könnte. Dabei habe ich nun herausgefunden, dass eine Methode auf eine Instanzvariable zugreift, welche aber auf einmal leer ist (was ich im Debugger sehen konnte). Der Garbage Collector hat also in der Zwischenzeit einfach meine Variable freigegeben/überschrieben/gelöscht (???). Testweise habe ich nun mal in der Methode, in der ich der Variable den benötigten Wert zuweise, ein retain gemacht. Nun läuft das Programm ohne Absturz und die Variable hat in der auslesenden Methode auch den richtigen Wert.
Nun bin ich aber etwas verwirrt: Wieso kommt der blöde Garbage Collector auf die bescheuerte Idee, einfach meine Instanzvariablen freizugeben? Das macht er scheinbar nur, wenn ich die Variable eine Zeit lang nicht mehr anrühre. Im Apple-Guide zum Gargabe Collector steht daher auch, dass man dies mit retain verhindern kann. Woher soll ich nun aber wissen, wann es für den Garbage Collector Zeit ist, meine Variable freizugeben? Damit habe ich ja mehr oder weniger immer das Risiko, wenn zwischendurch mal etwas länger dauert. Kann ich vllt. die Instanzvariablen so einstellen, dass sie vom Garbage Collector nicht angerührt werden?



 
									 
									 
									