Musisz być bardziej szczegółowy. Nie musisz sprawdzać, czy wszyscy uczestnicy wydarzenia zostali anulowani, ponieważ w zwykłym przypadku subskrybent ma krótsze życie niż wydawca. A przeciek pamięci występuje tylko wtedy, gdy subskrybent wydaje się być dłużej żywy niż wydawca, dlatego istnieje odniesienie, które uniemożliwia GC zbieranie obiektu wydawcy.
Teraz musimy sprawdzić, czy subskrybując wydarzenie na stosunkowo krótkim obiekcie, w końcu zrezygnujesz z subskrypcji.
Heurystyki, które mogę wymyślić w tym przypadku: przeanalizuj wszystkie obiekty zmiennych lokalnych (które są ograniczone zakresem obecnego bloku kodu {}) i wszystkie obiekty, które jawnie usuniesz. Dla każdego wydarzenia na tych obiektach policz ile razy je zasubskrybowałeś i ile razy zrezygnujesz z subskrypcji. Jeśli pierwsza liczba jest większa, wyślij ostrzeżenie.
Oczywiście, że nie obejmuje wszystkich przypadków, ale myślę, że żadne podejście statyczne nie może obejmować wszystkich przypadków w tym problemie, potrzebujesz pewnej metody, która jest wystarczająco dobra.
Nie będę tu wspominał o zaletach analizy dynamicznej i recenzji kodu, ponieważ jest to osobny temat, niezwiązany z pytaniem.
dziękuję, to jest najbliższe odpowiedzi, której szukałem. Ale w uczciwości inne odpowiedzi są również prawdziwe, a tam, gdzie to możliwe, wdrażamy słabe referencje. –