objective-c - ios开发中self和下划线的区分
黄舟
黄舟 2017-04-27 09:02:53
0
3
816

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

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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

répondre à tous(3)
洪涛

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.

黄舟

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

曾经蜡笔没有小新

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. .

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!