Когда я проверяю одноэлементное свойство, равное nil, оно убивает мое приложение. Но когда я проверяю nil в свойстве экземпляра класса, все работает нормально.
Это прекрасно работает:
self.MyProperty == nil
но это убьет приложение с «EXC_BAD_ACCESS»
[MySingleton sharedManager].SomeProperty != nil
Какая разница с синглтоном, который я не могу проверить на ноль?
Вот одноэлементная реализация:
.h файл:
@interface MySingleton : NSObject {
NSString * SomeProperty;
}
@property (nonatomic, copy) NSString * SomeProperty;
+(MySingleton *)sharedManager;
@end
.m файл:
#import "MySingleton"
static MySingleton *sharedManager = nil;
@implementation MySingleton
@synthesize SomeProperty;
- (void)dealloc {
[SomeProperty dealloc];
[super dealloc];
}
+(MySingleton *)sharedManager
{
if (!sharedManager){
sharedManager = [[MySingleton alloc] init];
}
return sharedManager;
}
Это то, что я нахожу в консоли, когда пытаюсь назначить что-то SomeProperty:
MyApp(51363,0xa0389500) malloc: *** mmap(size=2147487744) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Current language: auto; currently objective-c
(gdb) break malloc_error_break
Note: breakpoints 6 and 8 also set at pc 0x929c2072.
Breakpoint 11 at 0x929c2072
(gdb) continue
(gdb) po [MySingleton sharedManager].SomeProperty
Cannot access memory at address 0x0
(gdb) po [MySingleton sharedManager]
<Session: 0x1938fa0>
Я получаю выше только при попытке назначить. При попытке чтения переменной происходит сбой.