IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Objective-C Discussion :

Strong et weak, variable locale


Sujet :

Objective-C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 83
    Points : 0
    Points
    0
    Par défaut Strong et weak, variable locale
    Bonjour,

    Si j'ai bien compris, strong permet d'obtenir une référence forte et donc la valeur concernée ne sera libérer qu'a la destruction de l'objet.
    Alors que dans le cas de weak j'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    __strong NSString *yourString = @"Your string";
    __weak NSString *myString = yourString;
    yourString = nil;
    NSLog(@"%@", myString);
    On est d'accord que d'après la doc, myString devrait être a nul puisque j'ai détruit yourString non ?
    Car ce n'est pas ce qui ce produit et je ne comprend pas...
    Merci d'avance.

  2. #2
    Membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 40
    Points : 66
    Points
    66
    Par défaut
    Bonjour,

    J'ai fait le test avec NSString et NSNumber, le résultat et que les objects ne sont pas déréférencés.

    En revanche, en testant avec ma propre classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    @interface TestObject : NSObject
     
    @end
    ------------------------------------------------------
    @implementation TestObject
     
    -(NSString *) description{
        return @"Hello";
    }
    ------------------------------------------------------
        TestObject * st1 = [[TestObject alloc] init];
       __weak TestObject * st2 = st1;
        NSLog(@"log : %@", st1);
        st1=nil;
        NSLog(@"log : %@", st2);
    @end
    Le résultat correspond à ce qui est attendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    2012-06-16 19:26:32.445 Test[665:f803] log : Hello
    2012-06-16 19:26:32.447 Test[665:f803] log : (null)
    A mon avis, les objects créés sont referencés par leurs classes, pour des raison de réutilisabilité ultérieure.
    On retrouve ce pattern dans les langages comme java (class String et Long).


    Cordialement.
    Omar MEBARKI

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par lirycs78 Voir le message
    Bonjour,

    Si j'ai bien compris, strong permet d'obtenir une référence forte et donc la valeur concernée ne sera libérer qu'a la destruction de l'objet.
    Alors que dans le cas de weak j'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    __strong NSString *yourString = @"Your string";
    __weak NSString *myString = yourString;
    yourString = nil;
    NSLog(@"%@", myString);
    On est d'accord que d'après la doc, myString devrait être a nul puisque j'ai détruit yourString non ?
    Car ce n'est pas ce qui ce produit et je ne comprend pas...
    Merci d'avance.
    Quand vous initialisez des NSString avec des constantes, la classe de l'objet alloué n'est pas NSString mais une sous-classe : NSCFConstantString, classe dont retain et release sont en fait des NOP.

Discussions similaires

  1. text, ntext et image sont interdits dans les variables locales
    Par Sebounet19 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 04/07/2013, 15h44
  2. Réponses: 3
    Dernier message: 02/03/2006, 19h22
  3. [MFC] Globaliser une variable locale
    Par Philippe320 dans le forum MFC
    Réponses: 3
    Dernier message: 01/12/2005, 20h12
  4. variables locales ou globales?
    Par molesqualeux dans le forum C
    Réponses: 20
    Dernier message: 09/11/2005, 23h03
  5. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 08h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo