[ios]后更新到 Xcode 6 许多不兼容转换分配警告 / 错误出现

发布时间: 2017/3/28 21:17:31
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

后更新到 Xcode 6 许多不兼容转换分配警告 / 错误开始出现

在.h 文件中︰

@property (nonatomic) BOOL *done;

在.m 文件中︰

@synthesize done;
- (id)init
{
if (self = [super init])
{
    self.done = FALSE;
}
return self;
}

- (void) crashed {
    self.done = TRUE;  #this line gives an incompatible type conversion warning
}

在升级后出现很多的这些警告。任何人都有同意类似问题吗? 这不是一个本地化的问题,分散在整个项目的问题。 我以为我的基金会的一些错了,或者是它吗?

解决方法 1:

并不是所有变量在objective-c 都不得不宣布与 * 字符语言一些新人认为。它是 C 遗产要显示的变量是指向对象的指针。一些基本的类型喜欢 intBOOL 都是过于简单,需要将它们存储在对象中,所以使用 C 风格原始类型的开销。从文档

在哪里你只是不需要的收益 (或相关间接费用) 的使用对象来表示的值的情况下使用标量类型。而字符串的字符通常表示为 NSString 类的实例,数值通常存储在标量的本地变量或属性中。

BOOL 是基元数据类型在objective-c,是不是指针。警告是正确的。将变量声明为像这样︰

@property (nonatomic) BOOL done;

注意到缺乏 * 字符的变量的名称旁边。其他基元类型喜欢 intfloat 还应以类似的方式声明。

一些其他的事情你的代码。正确的objective-c 约定为 BOOL 值是 YES 而不是 TRUENO 而不是 FALSE ,所以你应该坚持下去。此外,自 Xcode 4.4,你不需要 @synthesize 在一些特殊情况下这里描述。正如在评论中指出,它也是更好地使用 instancetype 而不是 id的文档中所述的情况。

赞助商