Quelle est la valeur par défaut d’une `` variable en Objective-C ?
Réponses
Trop de publicités?Il n'y a pas de valeur par défaut si vous écrivez
-(void)somemethod {
BOOL x; // <--- no default value
Il est initialisé à la poubelle.
Cependant, pour un BOOL
ivar, il sera initialisé à l' NO
, comme l'ensemble de l'instance est rempli avec 0 lors de l'initialisation.
(Remarque: Lorsque l'ARC est activé, local pointeurs d'objet sera toujours avoir une valeur par défaut nil
, mais non de l'objet de type BOOL sont toujours initialisés à la poubelle. Voir les variables Locales fixé à néant? (Objective-C).)
J'ai fait quelques expériences de ma propre en utilisant Xcode 5.1, OS X Mavericks 10.9.4. Pour ceux qui ne savent pas ALog est une modification de la NSLog. De toute façon, la première expérience a été d'utiliser isLandscape
comme une variable publique, avec @synthesize
, pour être accessible par le parent-vue-contrôleur (affiche ci-dessous). Deuxième expérience n'a pas utiliser @synthesize
et je, de toute évidence, utilisé self.isLandscape
pour obtenir le même résultat dans la console. La sortie de la console est en dessous de mon code. Troisième expérience a utilisé "jardin flottant" comme une variable locale à l'intérieur d'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 les 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 "jardin flottant" n'est plus une propriété. Je l'ai mis à être 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 sont issus 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 devine que les propriétés sont initialisées par moi ou Xcode automatiquement, mais les variables locales n'obtenez pas de valeurs à tous. Même si, regardez [164] variable locale n'est pas OUI ou NON, mais c'est non-nul? Je suppose que c'est l' (aléatoire) de la valeur d'ordures que vous ne pouvez pas compter sur. J'espère que cela aide la personne à côté de vous. J'ai appris quelque chose, mais j'ai hâte de commentaires. Merci et bonne chance!