NSURLSession : une fuite de connexion cachée

Jan 24 2023
Lorsqu'ils travaillent avec la classe NSURLSession d'Apple, les développeurs sont souvent avertis du risque de fuite de mémoire si la session n'est pas correctement invalidée. Cependant, ce qui n'est pas communément connu, c'est qu'il existe également une fuite de connexion qui peut se produire si la session n'est pas invalidée.

Lorsqu'ils travaillent avec la classe NSURLSession d'Apple, les développeurs sont souvent avertis du risque de fuite de mémoire si la session n'est pas correctement invalidée. Cependant, ce qui n'est pas communément connu, c'est qu'il existe également une fuite de connexion qui peut se produire si la session n'est pas invalidée.

J'ai découvert cette fuite de connexion lors de l'utilisation de l'application macOS Little Snitch et j'ai pu la confirmer via un exemple de projet Xcode et des traces de paquets. Mon exemple d'application a exécuté deux sessions éphémères consécutives avechttps://www.reddit.comet a constaté que même lorsque invalidateAndCancel était appelé, la connexion restait ouverte. Cette fuite de connexion peut être vérifiée à l'aide de l'outil de ligne de commande netstat.

De plus, il a été constaté que même si l'application n'a plus de références aux objets NSURLSession, le framework système via URLProtocol conserve toujours des références à ces objets, ce qui entraîne une deuxième fuite de mémoire.

Il est important d'être conscient de ce problème lorsque vous travaillez avec NSURLSession et de toujours invalider la session pour éviter les fuites de mémoire et de connexion.

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