recherche

Maison  >  Questions et réponses  >  le corps du texte

objective-c - oc单例的一些问题

第一种不能在全局使用...没有值。第二种可以..搞不清楚原理阿

1.+ (User *)shareUser {

static User *_sharedSingleton = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
    _sharedSingleton = [[self alloc] init];
});
return _sharedSingleton;

}

2.static User *_sharedSingleton = nil;

@implementation User

给我你的怀抱给我你的怀抱2848 Il y a quelques jours704

répondre à tous(2)je répondrai

  • ringa_lee

    ringa_lee2017-04-28 09:07:51

    Ça y est, le premier est le code standard actuel du singleton ObjC.

    + (User *)shareUser {
    static User *_sharedSingleton = nil; //静态全局变量
    static dispatch_once_t predicate;
    dispatch_once(&predicate, ^{
        _sharedSingleton = [[self alloc] init]; //dispatch once 保证大括号里的代码只执行一次
    });
    return _sharedSingleton;
    }

    Cette méthode de singleton est la forme standard en mode ARC (gestion automatique de la mémoire). Lors d'un appel externe, obtenez directement [类名 shareUser] Pensez à écrire l'interface dans le fichier h et n'utilisez pas _sharedSingleton.

    xxx.h

    @interface xxx : xxx
    {
    
    }
    + (instancetype)shareUser;
    @end

    Iciinstancetype renvoie le type de la classe actuelle.

    Quant au deuxième morceau de code, l'écriture static User *_sharedSingleton = nil; en tant que variable globale est une méthode d'écriture à l'ère MRC, comprenant la réécriture (id)allocWithZone:(NSZone *)zone et d'autres méthodes, qui est également une méthode d'écriture à l'ancienne.

    répondre
    0
  • 高洛峰

    高洛峰2017-04-28 09:07:51

    Le cycle de vie des variables statiques modifiées par le mot-clé static est le même. Elles sont initialisées au moment de la compilation et la mémoire ne sera libérée qu'à la sortie du programme ! Cependant, les variables ont une portée. Par exemple, dans votre première façon d'écrire, cette variable est une variable statique locale et ne peut être utilisée que dans cette méthode ! Quant à votre deuxième façon d'écrire, cette variable est une variable statique globale et peut être utilisée globalement

    répondre
    0
  • Annulerrépondre