Pointeur

yafouyafou Membre
07:07 modifié dans API UIKit #1
Salut les amis

J'ai un tableau d'objet, j'ajoute des objets et tout est Ok.
Si j'appel ce tableau là  depuis une autre view je m'aperçoit que les valeurs ont disparut (mais apparemment l'adresse rest...peut être).

<br />NSString *FirstName =[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 5)];<br />//NSlog(FirstName); --&gt; Donne&nbsp; bien la valeur<br />UserINFO * userInfo = [[UserINFO alloc] initWithName :@&quot;TYPE0&quot; :FirstName &quot;&quot;];<br />[listUserInfo addObject:userInfo];<br /><br />


Donc si j'accède au tableau listUserInfo à  l'index 1 par exemple,
La propriété 1 a bien la valeur "TYPE0",
alors que la propriété 2 n'a plus la valeur (ex:"Yafou").
Pour info, si jee rempace la variable FirstName par une valeur en dure ça marche.
Voilà , et merci à  tous.

Réponses

  • Philippe49Philippe49 Membre
    07:07 modifié #2
    Je ne comprends pas la syntaxe à  la fin de cette ligne
    UserINFO * userInfo = UserINFO alloc] initWithName :[b]@&quot;TYPE0&quot; :FirstName &quot;&quot;[/b;
    C'est de la concaténation de chaà®ne que tu veux faire ?

    dans 1236101251:

    Si j'appel ce tableau là  depuis une autre view je m'aperçoit que les valeurs ont disparut (mais apparemment l'adresse rest...peut être).

    C'est le genre d'erreurs de retain/release .
  • yafouyafou Membre
    mars 2009 modifié #3
    dans 1236102623:

    Je ne comprends pas la syntaxe à  la fin de cette ligne
    UserINFO * userInfo = UserINFO alloc] initWithName :[b]@&quot;TYPE0&quot; :FirstName [/b;


    cette ligne la c'est l'appel à  une fonction que je lui passe 2 paramètres.
    Je n'ai pas fait de release.
  • Philippe49Philippe49 Membre
    07:07 modifié #4
    1) Le userInfo est initialisé avec un schéma [[..  alloc] init... ] .  la sortie son retainCount est donc de 1. Puis on l'ajoute à  une collection [listUserInfo addObject:userInfo]; Il reçoit de nouveau un message retain, et son retainCOunt passe à  2.
    Il serait normal d'enchaà®ner un release sur cet objet :
      UserINFO * userInfo = [[UserINFO alloc] initWithName :@TYPE0 :FirstName];
      [listUserInfo addObject:userInfo];
      [userInfo release];

    2) Firstname est créé lui par une "convenient method" . Il est donc en mode autorelease.
    Il faut qu'il reçoive un retain dans la méthode initWithName: : si on veut qu'il ne reçoive de message de déallocation, lorsqu'il sera libéré par l'autoreleasepool.
  • yafouyafou Membre
    07:07 modifié #5
    D'accord.
    C'est claire, j'ai corrigé et ça marche.
    Merci et Merci.

    je tacherais à  chercher la signification d'une méthode : convenient method

    @+
  • Philippe49Philippe49 Membre
    07:07 modifié #6
    dans 1236159330:

    je tacherais à  chercher la signification d'une méthode : convenient method

    C'est tout simple . prenons l'exemple des méthodes de construction d'une chaà®ne NSString
    On trouve des méthodes qui commencent par init
    – init 
    – initWithBytes:length:encoding: 
    – initWithBytesNoCopy:length:encoding:freeWhenDone: 
    – initWithCharacters:length: 
    – initWithCharactersNoCopy:length:freeWhenDone: 
    – initWithString: 
    – initWithCString:encoding: 
    – initWithUTF8String: 
    – initWithFormat: 
    – initWithFormat:arguments: 
    – initWithFormat:locale: 
    – initWithFormat:locale:arguments: 
    – initWithData:encoding: 

    et d'autres qui commencent par string :
    + stringWithFormat: 
    + localizedStringWithFormat: 
    + stringWithCharacters:length: 
    + stringWithString: 
    + stringWithCString:encoding: 
    + stringWithUTF8String:


    Les premières associées à  un alloc renvoie l'objet créé en mode retain
    Les secondes sont ds convenient methods, renvoyant les objets en autorelease.

    Il est bon quand on fait ses propres méthodes de respecter ces conventions de nommage.
  • yafouyafou Membre
    07:07 modifié #7
    Cool,
    Merci l'ami pour tous ses info.
Connectez-vous ou Inscrivez-vous pour répondre.