如何访问BOOL类型属性?

Tha*_*nks 2 iphone uikit

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

@interface MyViewController : UIViewController {
    BOOL blackBackground;
}
@property(nonatomic, assign) BOOL blackBackground;
Run Code Online (Sandbox Code Playgroud)

在实现中,我有@synthesize for blackBackground.

然后,我实例化此对象并执行:

[myViewController setBlackBackground:YES];
Run Code Online (Sandbox Code Playgroud)

既然布尔值应该是值YES(或true;)).但是,我检查:

if ([myViewController blackBackground]) {
  NSLog(@"yep, it's true");
}
Run Code Online (Sandbox Code Playgroud)

然而,它似乎没有响应或返回任何东西,要么值没有设置或我不能调用/检查它.知道那里有什么问题吗?

Lou*_*arg 17

你确定你实际上在使用上面的代码吗?它有语法错误,不会编译,因此完全有可能你没有看到执行的代码,因为你正在运行代码的旧副本.

您无法声明标量属性具有任何类型的保留,赋值,复制语义的问题,这将导致编译错误.你应该改变:

@property(nonatomic, assign) BOOL blackBackground;
Run Code Online (Sandbox Code Playgroud)

@property(nonatomic) BOOL blackBackground;
Run Code Online (Sandbox Code Playgroud)

  • retain表示当您设置属性时将其设置为实际对象(因此您的对象将看到发生的突变),并且会阻止保留计数.copy表示将属性设置为传入的对象的副本.assign表示您指定赋值(如在retain中)而不增加retainCount.由于标量值不接受消息或参与ObjC保留/释放,因此这些属性不适用于它们. (3认同)