Was bedeutet "Autoreleased mit kein Schwimmbad im Ort" bedeuten?
Meine Bewerbung-Struktur ist wie folgt,
der Kern ist in C++ geschrieben und mit Faden stark, und ich bin mit der Entwicklung von UI in Objective C oben drauf
wenn ich das nicht ausführen der thread funktioniert es einwandfrei, aber ich kann es nicht deaktivieren, stop thread, UI abstürzt, zufällig in der log konnte ich sehen , folgende Meldung
__NSAutoreleaseNoPool(): Object 0x350270 of class NSCFString autoreleased with no pool in place - just leaking
Ähnliche Meldungen kommen dann einmal,
durch googeln komme zu wissen, ich brauche, um NSAutoReleasePool, um es loszuwerden, aber wie es ist möglich, zu integrieren, das gleiche mit C++ - code.
Edit: Core lib aktiviert werden von UI , daher vermute ich, seine sicher zu sagen, dass die UI läuft in der main-thread, Lib erstellen/beenden thread ohne Benachrichtigung UI,
in diesem Fall kann ich nennen AutoReleasePool in der Benutzeroberfläche
Kann jemand mich anleitet?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen diese docs für das, was Sie wissen sollten über multithreading mit Kakao: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafetySummary/ThreadSafetySummary.html
Es ist OK, um Ihre app entwerfen, wie Sie haben, aber zwei Dinge sollten im Auge behalten werden:
Etwa so:
Wird reparieren Ihre Konsole Fehler, aber haben Sie vielleicht andere Probleme, führte zu der tatsächlichen Absturz waren Sie zu sehen.
Es bedeutet, dass Sie autoreleased etwas ohne einen autorelease-pool statt.
Jeder thread hat einen Stapel von autorelease pools. Auf der main-thread, ein autorelease pool wird für Sie erstellt, bevor Kakao Anrufe in Ihrem code und entwässert nach Ihrem code gibt. Jedes Objekt, das Sie autorelease (ob explizit oder implizit) geht in den pool, so dass die pool-release wird es, wenn der pool wird abgelassen. Wenn du einen thread erstellst, müssen Sie erstellen und drain ein autorelease pool auf, dass der thread selbst. (Oder einfach nicht autorelease nichts, aber das ist praktisch unmöglich, für jede sinnvolle Menge an code.)
Wenn Sie sich entscheiden, die jemals ausführen von code unter garbage-collection, die Sie brauchen, um zu senden den pool
drain
, nichtrelease
, wenn Sie fertig sind mit es, für den pool, um nützlich zu sein. Bei der GC aktiviert ist, wirdrelease
undautorelease
Nachrichten nichts zu tun—, dass Sie gar nicht Durchlaufen. Ihre autorelease pool wird reagierendrain
durch Stossen der garbage collector, welche ist die nächste entspricht dem loslassen der Objekte, die in den pool.Die Memory Management Programming Guide for Cocoa Sie weitere Informationen zu den autorelease-pools, unter anderem.