Sam*_*cer 0 variables singleton properties objective-c ios
我创建了一个Objective-C Singleton类.我在课堂上有一些属性,包括BOOL属性.由于一些奇怪的原因BOOL,我声明的变量在设置的范围之外"重置"为YES.
在Singleton类的头文件中,BOOL使用@property以下参数声明:
@property (nonatomic, assign, readonly) BOOL shouldCryptData;
在实现中的Singleton类@interface中,我重新定义了相同的属性readwrite(因为我需要它只能读取到外部类,而是读取/写入我自己的).
@interface SingletonClassName ()
    @property (nonatomic, assign, readwrite) BOOL shouldCryptData;
@end
BOOL在单例类的初始化期间设置该属性.我在其中一个init方法中设置它.有多种init方法可以指定是否应该加密数据 - 这只是设置位置的一个示例.只有一个我的init方法调用super,所有其他方法调用main init.
- (id)init {
    self = [super init];
    if (self) {
        // Brief setup code
        [self setShouldCryptData:NO]; // Have also tried using dot-notation and without *self*
        // I can confirm that the shouldCryptData property is NO (within the current scope) right after setting it in this method
    }
    return self;
}
现在,奇怪的是,当我尝试shouldCryptData从任何其他方法访问时,它总是返回YES.在明确将其设置为NO后,为什么会返回YES?
我没有以任何奇怪的方式访问它,就像这样:
if (self.shouldCryptData == YES) // Outside of the init method, this is ALWAYS true
我知道我做错了什么,但我无法理解.我觉得单身人士对此有所了解,但我不确定.似乎Google和StackOverflow都没有任何答案.有任何想法吗?
编辑
单身实施:
//-------- Header ---------------------//
@interface SingletonClassName : NSObject
+ (SingletonClassName *)sharedManager;
@end
//-------- Implementation ------------//
@implementation
+ (SingletonClassName *)sharedManager {
    static SingletonClassName *sharedManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if (sharedManager == nil) sharedManager = [[super allocWithZone:NULL] init];
    });
    return sharedManager;
}
+ (id)allocWithZone:(NSZone *)zone {
    return [self sharedManager];
}
- (id)copyWithZone:(NSZone *)zone {
    return self;
}
最简单的解释是你没有一个单例,你在一个实例上设置该属性,在另一个实例上读取它.
尝试NSLog(@"%p", self)使用您设置和访问属性的所有方法,并确保它们都是相同的.
添加:
这是我通常的单例逻辑:
+ (instancetype) sharedInstance {
    static MyClass *singleton;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        singleton = [[self alloc] init];
    });
    return singleton;
}
[MyClass sharedInstance]在需要时调用.
| 归档时间: | 
 | 
| 查看次数: | 2330 次 | 
| 最近记录: |