Connaitre le propriétaire d'un objet

Hello,


 


J'ai un objet objet 1 qui contient une propriété de type objet 2.


 


Est ce que dans l'implémentation d'objet 2, je peux savoir a qui il appartient?


Dans le cas présent ce serait objet 1, mais si un autre objet (objet 3) contenait un objet de type objet 2 j'aurais bien aimé savoir.


Merci d'avance.


 


Réponses

  • MayerickMayerick Membre
    février 2015 modifié #2
    Hello,


    Oui c'est possible mais il va falloir faire attention aux retain cycle et donc utiliser de préférence weak pour retenir le propriétaire de obj2, mais bien sur ça dépend de ce que tu veux faire exactement.


    De la même manière que tu fais dans ta classe Obj1 :

    @property (strong, nonatomic) Obj2 *obj2;


    Puis dans le .m

    obj1.obj2 = obj2


    Dans ta classe Obj2 tu peux faire :

    @property (weak, nonatomic) Obj1 *obj1;


    Ce qui te donne dans le .m

    obj1.obj2 = obj2;

    obj2.obj1 = obj1.


    J'espère que ça répond à  ta question.
  • Hello,


     


    Je ne pense pas que c'est possible. La seule choses que tu peux faire est d'utiliser Instruments, tu pourras le nombre d'instances de tel objet, le nombre de fois alloué,....


     


     


    Pourquoi tu cherches à  faire ça ?  Y a forcément d'autres solution à  ton problème. 


  • colas_colas_ Membre
    février 2015 modifié #4

    A priori, obj2 peut "appartenir" à  plusieurs objets. Donc, avec cela en tête, tu ne pourras pas trouver LE owner d'un objet.


     


    Tu peux créer un sous-classe de NSObject par exemple OwnedObject qui aurait une @property (weak) owner. Tu devrais évidemment setter qui est le owner quand tu affectes tes objets.


     


    Ensuite tu pourrais faire :



    - (OwnedObject *)owner
    {
    if (!_owner)
    { return self ;
    }
    else
    {
    return self.owner.owner ;
    }

    ça permettra d'aller cherche le owner du owner, etc. (avec une condition d'arrêt s'il n'y a pas d'owner)


     


    Idéalement une catégorie sur NSObject serait 10000 fois mieux mais je ne sais pas si on peut ajouter une @property (weak) dans une catégorie. Je sais qu'en bidouillant on peut ajouter une iVar via une catégorie. Je pense que c'est aussi possible de spécifier si elle est weak ou pas.


  • CéroceCéroce Membre, Modérateur


    Je sais qu'en bidouillant on peut ajouter une iVar via une catégorie. Je pense que c'est aussi possible de spécifier si elle est weak ou pas.




    Pour ajouter des propriétés dans une catégorie, on utilise les "associated values".


    On doit préciser la gestion mémoire pour la valeur associée.

Connectez-vous ou Inscrivez-vous pour répondre.