Circoli viziosi in ARC

di il
8 risposte

Circoli viziosi in ARC

Apro questo thread per discutere di un caso particolare che è saltato fuori in un altro thread. Premetto che sono tutti argomenti nuovi per me per cui mi potranno sfuggire delle sciocchezze.

Il problema è questo: come si gestisce il caso di due classi in rapporto Padre/Figlio in ARC (Automatic Reference Counting), ovvero quando ci sono due classi ognuna che ha un puntatore all' altra?

8 Risposte

  • Re: Circoli viziosi in ARC

    Se non faccio niente cosa succede?
  • Re: Circoli viziosi in ARC

    Considera un caso come questo:
    
    @interface Father : NSObject
    @property Child* child;
    @end
    
    
    @interface Child : NSObject
    @property Father *father;
    @end
    
    
    Father *father = [Father new];
    Child *child = [Child new];
    father.child = child;
    child.father = father;
    
    I due oggetti non verranno rilasciati (provare per credere). Ogni oggetto è proprietario dell' altro e i due si bloccano a vicenda. Per ovviare a questo problema bisogna scrivere:
    
    @interface Child : NSObject
    @property (weak) Father *father;
    @end
    
    Mettendo Weak si indica che quel puntatore non ha la proprietà dell' oggetto e quindi non viene considerato nel conteggio dei riferimenti.
  • Re: Circoli viziosi in ARC

    Scrivendo l' esempio ho degli include circolari, come si scrive il forward di una classe?
  • Re: Circoli viziosi in ARC

    Devi scrivere questo:
    
    @class MyClass;
    
  • Re: Circoli viziosi in ARC

    Un altra domanda, come fai a vedere che gli oggetti non vengono rilasciati?
  • Re: Circoli viziosi in ARC

    Usa lo strumento 'Profile', lo trovi dentro il menu Product/Profile e poi scegli Allocation, avvia lo strumento e guarda quali oggetti rimangono 'Living'.
  • Re: Circoli viziosi in ARC

    Comunque la garbate collection è meglio, in C# non ci sono questi casini.
  • Re: Circoli viziosi in ARC

    Sono assolutamente d' accordo, anzi mi chiedo quante applicazioni bacate ci saranno sull' Apple Store.
    Alla Apple controlleranno pure ma mica possono beccare tutti i memory leak che si possono verificare a run-time.
Devi accedere o registrarti per scrivere nel forum
8 risposte