recherche

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

objective-c - ios开发中self和下划线的区分

今天碰到一个问题,就是用到懒加载的时候,我用了self,结果报错直接蹦了,

我们老师说这是self递归引用了,可我还是不明白它们之间的区别

黄舟黄舟2829 Il y a quelques jours896

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

  • PHP中文网

    PHP中文网2017-04-27 09:04:53

    self.x est utilisé pour accéder aux propriétés. Il accède en fait aux méthodes getX ou setX, mais la plupart du temps, le compilateur implémente automatiquement ces deux méthodes pour vous et crée automatiquement une variable d'instance associée, donc vous ne vous sentez pas arriver. _x est la variable d'instance créée automatiquement.
    Par exemple, vous définissez l'attribut suivant :

    @property(nonation, strong) NSString *x;

    Il y a un tas de code caché (simplifié) comme suit :

    NSString *_x;
    
    -(NSString *)x {
        return _x;
    }
    
    -(void)setX:(NSString *)x {
        _x = x;
    }

    Je suppose que votre code de chargement paresseux surcharge la méthode get de l'attribut. Self.x appelle en fait la méthode [self x] Si vous utilisez self.x dans la méthode get, alors ce self.x Pour appeler le [self. x], c'est une récursivité infinie.

    répondre
    0
  • 黄舟

    黄舟2017-04-27 09:04:53

    S'il est référencé, il n'y aura pas de différence. C'est le même pointeur. S'il est attribué, il y aura une différence. Self.xx=oo Mettez d'abord xxretaincount -1 puis conservez oo _XX copy pointe directement vers. oo. Il n’y a pas d’étape de conservation. Ni

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-04-27 09:04:53

    Je viens de deviner que vous pourriez être :

    self.some = [self some];
    -(type)some{
        self.some = [...];
    }
    

    Ensuite, lorsque vous appelez self.some, cela équivaut à utiliser [self some], et self.some dans some appelle à nouveau [self some]. . . Une boucle se forme. . .

    Le trait de soulignement signifie un accès direct, en contournant set et get. .

    répondre
    0
  • Annulerrépondre