NSNetService delegate und ARC

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • NSNetService delegate und ARC

    Hi Leute,

    wenn ich folgendes ausführe...


    Quellcode

    1. NSNetService * bonjourMonitor;
    2. bonjourMonitor = [[NSNetService alloc] initWithDomain:@"local." type:@"_device-info._tcp" name:@"My Mac"];
    3. [bonjourMonitor setDelegate:self];
    4. [bonjourMonitor startMonitoring];


    ...wird die entsprechende Delegate Methode niemals aufgerufen.

    Ich benutze Automatic Reference Counting. Wenn ich das gleiche ohne ARC mache, funktioniert es einwandfrei. Das NSNetService Objekt scheint die Weiten meines Speichers zu verlassen bevor das Delegate überhaupt aktiv werden kann.

    Was muss ich tun um das zu verhindern?


    Gruß
    Daniel
    “I want to see an elephant hunt down a man for the sole purpose of collecting his teeth, while a chorus of typewriters sings songs that praises the bananas for their wisdom, leadership, and their high levels of potassium.” ― Jarod Kintz, I Want
  • Hi,

    das hatte ich auch schon ausprobiert. Funktioniert leider nicht. :(

    EDIT:Ich habe bonjourMonitor jetzt als Instanzvariable angelegt. Das funktioniert natürlich. Trotzdem würde es mich interessieren wie ich verhindern kann dass so etwas released wird, wenn ich das gar nicht will. Objekte die mit [alloc] init] erzeugt werden sind ja automatisch schon strong. Aber eigentlich müsste ARC doch merken, dass mein bonjourMonitor jetzt ein Delegate hat und da höchstwahrscheinlich noch was kommt... o_O
    “I want to see an elephant hunt down a man for the sole purpose of collecting his teeth, while a chorus of typewriters sings songs that praises the bananas for their wisdom, leadership, and their high levels of potassium.” ― Jarod Kintz, I Want

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Daniel2 ()

  • Nein. Wie bereits sauerzapf schrieb: Du hast den Verweis darauf aufgegeben. Deshalb wird es entfernt.

    Es ist schlicht richtig, eine Property anzulegen. Das wollte dir sauerzapf damit sagen.

    ARC beschäftigt sich weder mit einer kompletten Codeanalyse von NSNetServie, Delegates. Es beschäftigt sich auch nicht mit höchsten Wahrscheinlichkeiten.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Ich finde es auch spannend zu wissen wie Du ohne ARC dann die mit alloc init allozierte Instanz wieder freigegeben hättest ohne eine Referenz darauf zu haben... Auch da hättest du eine Property machen müssen um kein leak zu erzeugen.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Also ARC achtet nur darauf ob es noch ein Verweis auf das Objekt gibt oder nicht und NICHTS anderes, richtig?

    Sagen wir ich erzeuge dynamisch einen ganzen Haufen von Instanzobjekten. Die kann ich ja schlecht alle als Property deklarieren. Kann ich die dann alle z.B. in ein Array packen und es wieder leeren, wenn ich mir sicher bin dass ich die Objekte nicht mehr brauche? @Thallius: So habe ich das nämlich teilweise vor ARC Zeiten gemacht.
    “I want to see an elephant hunt down a man for the sole purpose of collecting his teeth, while a chorus of typewriters sings songs that praises the bananas for their wisdom, leadership, and their high levels of potassium.” ― Jarod Kintz, I Want