Я провел несколько собственных экспериментов с использованием Xcode 5.1, OS X Mavericks 10.9.4. Для тех, кто не знает, ALog - это модифицированный NSLog. В любом случае, первый эксперимент состоял в том, чтобы использовать isLandscape
в качестве общедоступной переменной с @synthesize
, к которой должен обращаться родительский контроллер представления (как показано ниже). Второй эксперимент не использовал @synthesize
, и я, очевидно, использовал self.isLandscape
, чтобы получить тот же результат в консоли. Вывод консоли ниже моего кода. Третий эксперимент использовал isLandscape в качестве локальной переменной внутри метода.
@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);
}
Это результаты первых двух экспериментов ...
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
В третьем эксперименте isLandscape больше не является собственностью. Я установил ее как локальную переменную с интересными результатами:
- (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);
}
Эти результаты из третьего эксперимента ...
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
Я предполагаю, что свойства инициализируются мной или Xcode автоматически, но локальные переменные вообще не получают значений. Тем не менее, посмотрите, что локальная переменная [Строка 164] - это не ДА или НЕТ, но не ноль? Я думаю, что это (случайное) значение мусора, на которое вы не можете рассчитывать. Я надеюсь, что это поможет следующему человеку. Я кое-что узнал, но с нетерпением жду комментариев. Спасибо и удачи!