如何懒惰地在Objective-C中设置BOOL属性

wal*_*ace 3 boolean objective-c getter-setter ios

我需要一个数据结构上的BOOL属性,表示数据库中某个对象的状态,我想懒惰地设置该属性 - 也就是说,我不想在需要之前ping数据库,并且只设置那个时候的财产(也就是我第一次得到它).

对于像NSString这样的东西,我会像吸气鬼一样

- (NSString *)myString {
    if (!_myString) {

        // ask db for value
        _myString = [value returned from db]

    }
    return _myString;
}
Run Code Online (Sandbox Code Playgroud)

但似乎BOOL在Objective-C中默认为NO - 这意味着我永远不会知道该值是否实际上是NO,或者我还没有得到它.我已经开玩笑了,但我似乎无法弄清楚如何为这样的属性创造我想到的那种吸气剂.有什么建议?或者我错过了一些非常明显的东西?提前致谢.

Ban*_*ngs 5

您可以在对象内部使用NSNumber:

// .h
@interface Object : NSObject

@property (nonatomic, assign) BOOL myBool;

@end

//.m
@interface Object ()

@property (nonatomic, strong) NSNumber *myBoolFromDB;

@end

@implementation Object

- (BOOL) myBool {
    if (_myBoolFromDB == nil) {
        ...
    }
    return [_myBoolFromDB boolValue];
}

@end
Run Code Online (Sandbox Code Playgroud)