Maison > Questions et réponses > le corps du texte
#import <Foundation/Foundation.h>
@interface Person :NSObject
{
int age;
NSString * name;
}
-(void)setAge:(int)age;
-(void) sayHi;
@end
@implementation Person
-(void)setAge:(int)age{
self.age=age;
}
-(void)sayHi{
NSLog(@"im jerry %d",age);
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person* p=[Person new];
[p setAge:5];
[p sayHi];
}
return 0;
}
self.age=age;
这里报错了。
在java里面,不是this.age=age吗?oc里面难道不行吗?
大家讲道理2017-04-24 09:15:51
@property(copy) NSMutableArray *array;
Une fois cet attribut ajouté, il ressemble à une variable. En fait, le compilateur fait plus que simplement ajouter une variable :
Ajout d'une variable globale de classe NSMutableArray * _array
Ajout de la méthode Get-(NSMutableArray *)array;
Ajout de la méthode Set-(void)setArray:(NSMutableArray *)array;
Bien que votre code n'utilise pas @property
pour spécifier les attributs, il lui manque un nom de méthode qui correspond à la méthode set
de l'attribut. Par conséquent, vous pouvez toujours utiliser 点语法
lorsque vous l'utilisez.
self.age=age;
[self setAge:age];
A et B sont équivalents ! Après compilation, A sera converti sous la forme de B, et B sera ensuite converti sous la forme d'un appel de fonction C !
Vous appelez -setAge:
dans la méthode -setAge:
, ce qui entraîne une récursivité infinie. Si vous remarquez la pile du programme lorsqu'il plante, vous constaterez que la pile est pleine de -setAge:
.
Si vous souhaitez éviter ce problème, utilisez simplement l'affectation directe des variables de classe
_age = age;
天蓬老师2017-04-24 09:15:51
L'explication détaillée est celle mentionnée ci-dessus, en bref :
La syntaxe par points dans OC n'est qu'une fonctionnalité du compilateur, et l'essence est toujours l'appel de méthode.
高洛峰2017-04-24 09:15:51
N'utilisez pas la syntaxe par points ici et placez un trait de soulignement devant vos variables membres pour les distinguer. _age = âge;
怪我咯2017-04-24 09:15:51
Écrit ici @interface peut être utilisé directement sans ajouter soi-même.
Juste age = age