【问题标题】:How do I access an BOOL type property?如何访问 BOOL 类型的属性?
【发布时间】:2009-07-20 11:32:25
【问题描述】:

我有一个类,在标题中我定义了这个:

@interface MyViewController : UIViewController {
    BOOL blackBackground;
}
@property(nonatomic, assign) BOOL blackBackground;

在实现中我有黑色背景的@synthesize。

然后,我实例化这个对象并做:

[myViewController setBlackBackground:YES];

现在布尔值应该具有值 YES(或 true ;))。但是,我检查:

if ([myViewController blackBackground]) {
  NSLog(@"yep, it's true");
}

但是,它似乎没有响应或返回任何内容,要么没有设置值,要么我无法调用/检查它。知道那里有什么问题吗?

【问题讨论】:

    标签: iphone uikit


    【解决方案1】:

    你确定你真的在使用上面的代码吗?它有语法错误并且无法编译,因此您完全有可能没有看到执行的代码,因为您正在运行代码的旧副本。

    您不能将标量属性声明为具有任何类型的保留、分配、复制语义的问题,这将导致编译错误。你应该改变:

    @property(nonatomic, assign) BOOL blackBackground;
    

    @property(nonatomic) BOOL blackBackground;
    

    【讨论】:

    • 事实上这是我代码中的一个愚蠢的错字!谢谢!奇怪的是,我让它与@property(nonatomic,assign)一起工作。当我不提供分配或保留(什么都没有)时有什么区别?创建的访问器看起来如何?
    • retain 意味着当您设置属性时,您将其设置为实际对象(因此您的对象将看到发生的突变),并增加了保留计数。复制意味着您将属性设置为传入对象的副本。分配意味着您直接分配(如在保留中)而不增加保留计数。由于标量值不接受消息或参与 ObjC 保留/释放,因此这些属性不适用于它们。
    • 不确定这一切是否正确:“您通常将此属性用于标量类型,例如 NSInteger 和 CGRect,或者(在引用计数环境中)用于您不拥有的对象,例如委托。”
    【解决方案2】:

    我认为是 isBlackBackground 或者你当然可以使用 self.blackBackground

    【讨论】:

      【解决方案3】:

      我同意@Louis Gerbarg 的观点,并相信您有一些拼写错误,或者只是构建了旧版本的代码,但我不同意他为您的错误提供的原因: 他写道:

      你不能声明的问题 具有任何类型的标量属性 保留,分配,复制语义,它将 导致编译错误。你应该 改变:

      @property(nonatomic, assign) BOOL blackBackground;

      @property(nonatomic) BOOL blackBackground;

      根据附加的链接和 Apple 的文档:

      @property (nonatomic, assign) BOOL blackBackground;
      

      还有:

      @property (nonatomic) BOOL blackBackground;
      

      都是一样的,因为“assign”是属性的默认行为。

      (对吗?)

      previous similar stackOverflow question and answer

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多