Objekte außerhalb eines Blocks einer Variablen zuweisen

8

Der folgende Code stürzt ab, da der Inhalt von sentence verschwindet, wenn der letzte Block beendet wird.

%Vor%

Was ist der richtige / idiomatische Weg, um das zu erreichen?

    
Jonathan Watmough 24.08.2011, 01:42
quelle

3 Antworten

4

Ok, ich bin weggegangen und habe ein bisschen mit Xcode gespielt, und hier ist ein Modell von dem, was vor sich geht, das zu dem passt, was ich sehe.

Der Block, den ich oben benutzt habe, macht nichts Spezielles, aber der enumerateObjectsUsingBlock Code scheint sein eigenes NSAutoreleasePool zu haben, so dass das scheint, was verursacht hat, dass dealloc für Objekte alloc'ed aufgerufen wird. aber Autorelease im Block.

Der folgende Code entspricht im Verhalten dem, was ich oben sehe:

%Vor%

Wenn ich das innerPool -Objekt entferne, dann funktioniert der Code wie ich ursprünglich erwartet habe, und vermutlich wird der NSRunLoop -Pool schließlich die verschiedenen NSString -Objekte bereinigen.

HINWEIS: Dieser Thread ist jetzt das Google-Suchergebnis von Nummer 2 für 'enumerateObjectsUsingBlock Autorelease':

Google 'enumerateObjectsUsingBlock + Autorelease'

Das erste Ergebnis bestätigt diese Antwort. Danke allen.

    
Jonathan Watmough 24.08.2011, 05:20
quelle
1

Ok, ich bin mir nicht 100% sicher, was dort vor sich geht, aber in der Zwischenzeit funktioniert es, wenn du es änderst

%Vor%

Aktualisiert dank @ nacho4d

    
Paul.s 24.08.2011 01:51
quelle
1

Wie Sie bereits erwähnt haben, vermute ich, dass dieser Fehler auftritt, wenn der Autorelease-Pool ausgeführt wird, wie es wahrscheinlich in enumerateObjectsUsingBlock: der Fall ist. Dies wird ärgerlich sein, wenn Sie eine __block Variable haben. Sie können stattdessen einen NSMutableString verwenden oder einfach dies tun, der sowieso sauberer ist:

%Vor%

Wenn Sie alternativ ARC verwenden, sollte der Compiler das Problem für Sie beseitigen.

    
jtbandes 24.08.2011 02:05
quelle