更新到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
}
升级后出现了很多这些警告。有没有人有类似的问题? 这不是一个本地化的问题,这个问题遍布整个项目。 我以为我的一些基础是错的,或者是它?
答案 0 :(得分:0)
我很确定你想这样做:
@property (nonatomic) BOOL done; // Note: NOT a pointer
- (instancetype)init {
if (self = [super init]) {
self.done = NO;
}
return self;
}
- (void)crashed {
self.done = YES;
}
答案 1 :(得分:0)
并非所有目标C中的变量都必须使用*
字符声明,因为该语言的一些新手认为。显示变量是指向对象的指针是C遗留物。像int
和BOOL
这样的基本类型太简单了,不需要将它们存储在对象中的开销,因此使用了C风格的基元类型。来自the docs:
标量类型用于您不需要的情况 使用对象的好处(或相关的开销) 代表一个价值。通常表示字符串 作为NSString类的实例,数值通常存储在 标量局部变量或属性。
BOOL是Objective C中的primitive data type,不应该是指针。警告是正确的。声明变量如下:
@property (nonatomic) BOOL done;
请注意变量名旁边没有*
字符。其他原始类型(如int
或float
)也应以类似的方式声明。
关于您的代码的其他一些事情。 BOOL值的正确Objective C约定是YES
而不是TRUE
和NO
而不是FALSE
,因此您应该坚持使用它。另外,从Xcode 4.4开始,除了一些特殊情况described here之外,您不需要@synthesize
。正如评论中所指出的,如the docs中所述,在您的案例中使用instancetype
代替id
也更好。