2012-04-27 9 views
2

我最近在使用XCode 4.2和Apple LLVM complier 3.0/LLVM-GCC处理我公司的iOS项目时处理了几个问题。目标C:如何为未在类的接口中声明的实例变量生成警告?

下面是代码

A.h 
@interface A{ 
    int _count; 
}; 
@property(nonatomic,assign) count; 
@end 
A.mm 
@implementation A 
@synthesize count = _cont;//note a typo here !!! 
//... I use _count in below code 
@end 

错字不会产生编译错误或警告,编译或运行时(其实我不知道是谁做的,给我最好的猜测应该是编译器)会为我们生成一个_cont实例ivar。

这个功能很适合封装。我们的头文件可能更干净。但是这样的错字很难察觉。所以我想知道是否有任何设置为这种情况产生警告?我在没有任何发现的情况下搜索Clang的官方网站。

有人建议我不是在所有申报类接口的实例,并始终使用self.count。首先,我不喜欢这种代码风格,其次有些情况下,您的“setCount”方法可能会做更多的事情,而不仅仅是更改实例值,最后我们在引入此功能之前就开始了我们的产品。我不想改变现有代码的风格。

是否有人在这里遇到同样的问题?有什么好的想法和最佳实践?

回答

0

这是不可能的。编译器应该如何识别你的错字?

你也应该认识到,没有必要再编写自己为你的财产伊娃,作为@synthesize数= _count;已经足够在代码中通过_count到达你的iVar。

+0

它的可能性,即编译器可以读取宣布伊娃的名字,读属性的名称领域内,读取合成伊娃的名字,看到前两个比赛和第三没有,并发出了“你的意思?”警告。 – 2012-04-27 18:29:27

+0

从XCode 4.4开始看来,我们不需要编写@synthesize或定义备份iVar。只要声明一个属性就足够了。我们应该习惯于语言和编译器的改变。看起来改变的哲学是:编译器为你做更多的事情。接受答案应该是不可能的。 – 2012-11-17 10:43:55