implémentation d'un copyKeys: renvoyer un objet retenu ?

ClicCoolClicCool Membre
21:37 modifié dans API AppKit #1
Bonjour,

Pas de doutes Clang lave plus blanc, et mon code est étincellant :)


Néanmoins je suis étonné qu'il m'impose de renvoyer un objet avec un retain count à  1 dans une méthode de classe personnelle: [tt]+(NSMutableArray*)copyKeys[/tt] qui me sert à  facilité la copie d'un objet.

En gros, pour copier un objet, je commence donc par demander à  la classe les clefs pertinentes à  copier grâce à  mon:
[tt]+(NSMutableArray*)copyKeys[/tt] .
(NSMutableArray par ce que chaque sous-classe, après avoir appelé sa maman, complète le dictionnaire récupéré avec ses clefs personnelles)

Puis je récupère les valeurs pertinentes de l'objet originel avec:
- (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys

Enfin je "rempli" un objet nouvellement créé avec:
- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues

Si les deux dernière méthodes font partie d'un protocole informel, la méthode de classe +copyKey est mienne (enfin, je crois) et j'aurais tout aussi bien pu l'appeler +clefsDuChampDeTir ou autre.

[tt]+(NSMutableArray*)copyKeys[/tt] ferait-elle partie d'un protocole existant ?
Clang réagit-il à  cause du nom qui commence par copy.. ?
Y'a-t-il une convention de nomage que j'aurai enfreinte (à  l'insu de mon plein grès) en nommant ainsi ma méthode de classe ?







P.S. je me demande si on devrait pas ajouter une section "Gestion mémoire" pour y regrouper toutes les questions sur les retain, copy, release etc... ET le Garbage "édition Collector" (qui est finalement assez complexe à  maitriser dans ses détails)  ::)

Réponses

  • schlumschlum Membre
    octobre 2009 modifié #2
    C'est une règle syntaxique... Tout ce qui commence par "new" ou "alloc" ou qui contient "copy" doit renvoyer un objet avec un retainCount à  1.

    C'est indiqué là  :
    http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994

    This is the fundamental rule:

    You take ownership of an object if you create it using a method whose name begins with “alloc” or “new” or contains “copy” (for example, alloc, newObject, or mutableCopy), or if you send it a retain message. You are responsible for relinquishing ownership of objects you own using release or autorelease. Any other time you receive an object, you must not release it.
  • ClicCoolClicCool Membre
    21:37 modifié #3
    Merci Schlum !

    Il rigole pas avec la syntaxe Clang !

    Je vais donc essayer de trouver un nom moins conflictuel à  ma méthode alors.
  • AliGatorAliGator Membre, Modérateur
    21:37 modifié #4
    Je me posais la question justement... tout ce qui commence par "copy", ou qui se finit, par "copy" ?
    parce que les méthodes connues de l'API Cocoa sont plutôt essentiellement "copy" et... "mutableCopy" (et non "copyMutable")... à  moins que la règle/convention de nommage s'applique dans les deux sens ?
  • schlumschlum Membre
    21:37 modifié #5
    J'ai mis à  jour mon message au dessus avec la référence  :P
    En fait c'est tout ce qui contient "copy" ou commence par "alloc" ou "new"...
  • ClicCoolClicCool Membre
    21:37 modifié #6
    dans 1256561608:

    Je me posais la question justement... tout ce qui commence par "copy", ou qui se finit, par "copy" ?
    parce que les méthodes connues de l'API Cocoa sont plutôt essentiellement "copy" et... "mutableCopy" (et non "copyMutable")... à  moins que la règle/convention de nommage s'applique dans les deux sens ?


    Envisageant le nom de keysForCopy pour ma méthode et pensant du coup, comme toi, aux méthodes mutableCopy, je revanais justement pour poser la même question !!  :P

    Bon, va falloir que je trouve un autre nom encore ...

    MERCI
  • AliGatorAliGator Membre, Modérateur
    21:37 modifié #7
    keysForDuplication? ;D
Connectez-vous ou Inscrivez-vous pour répondre.