NSURLSession: Ein verstecktes Verbindungsleck

Jan 24 2023
Bei der Arbeit mit der NSURLSession-Klasse von Apple werden Entwickler häufig vor der Möglichkeit eines Speicherverlusts gewarnt, wenn die Sitzung nicht ordnungsgemäß ungültig gemacht wird. Was jedoch nicht allgemein bekannt ist, ist, dass es auch zu einem Verbindungsleck kommen kann, wenn die Sitzung nicht ungültig gemacht wird.

Bei der Arbeit mit der NSURLSession-Klasse von Apple werden Entwickler häufig vor der Möglichkeit eines Speicherverlusts gewarnt, wenn die Sitzung nicht ordnungsgemäß ungültig gemacht wird. Was jedoch nicht allgemein bekannt ist, ist, dass es auch zu einem Verbindungsleck kommen kann, wenn die Sitzung nicht ungültig gemacht wird.

Ich habe dieses Verbindungsleck bei der Verwendung der macOS-App Little Snitch entdeckt und konnte es anhand eines Beispiel-Xcode-Projekts und Paketverfolgungen bestätigen. Meine Beispiel-App führte zwei aufeinanderfolgende kurzlebige Sitzungen mit aushttps://www.reddit.comund stellte fest, dass die Verbindung auch dann offen blieb, wenn invalidateAndCancel aufgerufen wurde. Dieses Verbindungsleck kann mithilfe des Befehlszeilentools netstat überprüft werden.

Darüber hinaus wurde festgestellt, dass, obwohl die App keine Verweise mehr auf die NSURLSession-Objekte hat, das System-Framework über URLProtocol weiterhin Verweise darauf beibehält, was zu einem zweiten Speicherverlust führte.

Es ist wichtig, sich dieses Problems bewusst zu sein, wenn Sie mit NSURLSession arbeiten und die Sitzung immer ungültig zu machen, um Speicher- und Verbindungslecks zu verhindern.

Quelle:https://lapcatsoftware.com/articles/NSURLSession.html