Ich verwende ein Framework von Drittanbietern (und muss es verwenden), zu dem ich keine Quelle habe. Das Framework des Drittanbieters übernimmt die Erstellung einer authentifizierten Client / Server-Verbindung und gibt ein Paar geöffneter NStreams zurück.
Der Stream-Erstellungsprozess ist gemäß den Apple-Dokumenten wie folgt: alloc / init, set delegate, Zeitplan in run loop und open. Apples Docs gehen weiter zu sagen: "Sie sollten nie versuchen, auf einen geplanten Stream von einem Thread zuzugreifen, der anders ist als derjenige, der die Laufschleife des Streams besitzt." Ссылка
Der Stream-Entsorgungsprozess ist: Schließen, Entplanen, Freigeben.
Wenn man selbst einen Stream erstellt, ist klar, wo der Stream geplant wurde. Wenn ein Framework eines Drittanbieters den Stream erstellt, weiß man möglicherweise nicht, wo der Stream geplant wurde.
Wenn ich mir die Dokumentation anschaue, die ich gefunden habe, habe ich keine Möglichkeit gesehen, NSRunLoop und NSThread, mit denen ein offener NStream verbunden ist, programmatisch zu bestimmen. Gibt es eine Möglichkeit, diese Informationen zur Laufzeit zu ermitteln?
Ich werde einen Code geben, der wahrscheinlich funktionieren wird und mit Vorsicht verwendet werden sollte.
Wir definieren folgende Klassenkategorie:
%Vor%und Implementierung:
%Vor%Jetzt, an einer Stelle in Ihrem Anwendungsdelegaten, verwenden wir method swizzling, um die beiden ursprünglichen Methoden mit unserer Implementierung auszutauschen:
%Vor% Das resultierende Array enthält alle verknüpften NSRunLoop
s.