Réponses:
Il n'y a pas de valeur par défaut si vous écrivez
-(void)somemethod {
BOOL x; // <--- no default value
Il est initialisé à garbage.
Cependant, pour un BOOL
ivar , il sera initialisé à NO
, car toute l'instance est remplie avec 0 à l'initialisation.
(Remarque: lorsque ARC est activé, les pointeurs d'objets locaux auront toujours une valeur par défaut nil
, mais les variables locales de types non-objet comme BOOL sont toujours initialisées à garbage. Voir Variables locales définies sur nil? (Objective-C) .)
NO
comme mentionné ci-dessus. Je pense que tu veux dire var.
J'ai fait mes propres expériences en utilisant Xcode 5.1, OS X Mavericks 10.9.4. Pour ceux qui ne connaissent pas ALog est un NSLog modifié. Quoi qu'il en soit, la première expérience a été d'utiliser isLandscape
comme variable publique, avec @synthesize
, pour être accessible par le contrôleur de vue parent (affiché ci-dessous). Deuxième expérience n'a pas utilisé @synthesize
et moi, évidemment, utilisé self.isLandscape
pour obtenir le même résultat dans la console. La sortie de la console est en dessous de mon code. La troisième expérience a utilisé 'isLandscape' comme variable locale dans une méthode.
@interface MyClass : UIView // (subclass used in my UIViewController)
…
@property (nonatomic) BOOL isLandscape; // < - - - testing this BOOL
…
@implementation MyClass
…
@synthesize isLandscape;
- (void)awakeFromNib
{
[super awakeFromNib];
// Test for YES or NO
if (isLandscape == YES) {
ALog(@"isLandscape == YES");
} else if (isLandscape == NO) {
ALog(@"isLandscape == NO");
} else {
ALog(@"isLandscape != YES/NO");
}
// Test for nil or non-nil
if (isLandscape) {
ALog(@"isLandscape");
} else if (!isLandscape) {
ALog(@"!isLandscape");
} else {
ALog(@"!= nil/non-nil");
}
// Test its value
ALog(@"isLandscape == %d", isLandscape);
}
Ces résultats sont issus des deux premières expériences…
2014-08-28 08:18:52.909 MyApp[493:60b] -[MyClass awakeFromNib] [Line 157] isLandscape == NO
2014-08-28 08:18:52.911 MyApp[493:60b] -[MyClass awakeFromNib] [Line 166] !isLandscape
2014-08-28 08:18:52.912 MyApp[493:60b] -[MyClass awakeFromNib] [Line 172] isLandscape == 0
Dans la TROISIÈME EXPÉRIENCE, «isLandscape» n'était plus une propriété. Je l'ai défini comme une variable locale avec des résultats intéressants:
- (void)awakeFromNib
{
[super awakeFromNib];
BOOL isLandscape; // < - - - testing this BOOL
// Test for YES or NO
if (isLandscape == YES) {
ALog(@"isLandscape == YES");
} else if (isLandscape == NO) {
ALog(@"isLandscape == NO");
} else {
ALog(@"isLandscape != YES/NO");
}
// Test for nil or non-nil
if (isLandscape) {
ALog(@"isLandscape");
} else if (!isLandscape) {
ALog(@"!isLandscape");
} else {
ALog(@"!= nil/non-nil");
}
// Test its value
ALog(@"isLandscape == %d", isLandscape);
}
Ces résultats proviennent de la troisième expérience…
2014-08-28 08:28:33.483 MyApp[581:60b] -[MyClass awakeFromNib] [Line 159] isLandscape != YES/NO
2014-08-28 08:28:33.486 MyApp[581:60b] -[MyClass awakeFromNib] [Line 164] isLandscape
2014-08-28 08:28:33.487 MyApp[581:60b] -[MyClass awakeFromNib] [Line 172] isLandscape == -24
Je suppose que les propriétés sont initialisées automatiquement par moi ou Xcode, mais les variables locales n'obtiennent aucune valeur. Même ainsi, regardez la variable locale [Ligne 164] n'est pas OUI ou NON mais elle est non nulle? Je suppose que c'est la valeur des déchets (aléatoire) sur laquelle vous ne pouvez pas compter. J'espère que cela aidera la prochaine personne. J'ai appris quelque chose mais j'attends avec impatience les commentaires. Merci et bonne chance!