如何在目标 C 类中设置布尔类型属性

Posted

技术标签:

【中文标题】如何在目标 C 类中设置布尔类型属性【英文标题】:How to set a boolean type property in objective C class 【发布时间】:2012-03-12 16:21:29 【问题描述】:

如何在目标 C 类中使用布尔属性,我是这样做的:

@property (nonatomic, copy) BOOL *locationUseBool;

但它给出的错误是:

具有“复制”属性的属性必须是对象类型。

什么是正确的声明方式?

【问题讨论】:

【参考方案1】:
@property (nonatomic, assign) BOOL locationUseBool;

无星号、无副本、无保留。

【讨论】:

或者你可以完全省略第二个参数(默认为assign)。 也可以考虑使用官方的C99 bool类型。它在投射等时具有更好的行为。 @JeremyP 投射到什么时? BOOL 是我在 Obj-C 上读过的所有内容的推荐。我错过了什么? @Yar: BOOL 只是char 的类型定义。 bool 是逻辑上 1 位宽的正确布尔类型。在 C 中,任何数量的非 0 整数类型都意味着评估为真。但是,将任何低 8 位恰好为零的非零整数转换为 BOOL 将导致 BOOL 变量为假。 (BOOL)0x1000 为假,但(bool) 0x1000 为真。 @JeremyP 我很震惊! pastie.org/3438141 那么,嗯,我应该在任何地方都使用bool,比如属性等吗?诚然,我并没有将 ints 分配给 BOOL,但成本效益如何?【参考方案2】:

你也可以这样声明。

@property (assign) BOOL locationUseBool;

基本上,如果您说非原子,并且使用@synthesize 生成访问器,那么如果多个线程尝试同时更改/读取该属性,则可能会发生错误。您可以获得部分写入的值或过度释放/保留的对象

在多线程程序中,原子操作不能被部分中断,而非原子操作可以。

【讨论】:

【参考方案3】:

这个对我有用。

@property (nonatomic) BOOL locationUseBool;

属性声明中没有星号 * 符号。此外,'assign' 的使用是可选的。

【讨论】:

以上是关于如何在目标 C 类中设置布尔类型属性的主要内容,如果未能解决你的问题,请参考以下文章

目标 C:如何在方法具有返回类型的方法中或在具有任何返回类型的覆盖方法中设置 NSAutoreleasePool?

如何在 INI 配置文件中设置布尔值?

如何在 SQL 中设置布尔值

如何在 typeorm 和 nest.js 中设置布尔验证

如何在程序中设置适当的布尔条件

有条件地在 JSF 组件标签中设置一个属性