I handled several issues recently when working on my company’s iOS project using XCode 4.2 and Apple LLVM complier 3.0 / LLVM-GCC.
Below is the code
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
The typo will not generate a compile error or warning, the compiler or run-time (actually I am not sure who did it, to my best guess should be the compiler) will generate a _cont instance ivar for us.
This feature is great for encapsulation. Our header files could be much cleaner. However such a typo is hard to notice. So I am wondering if are there any setting to generate warning for this case? I search Clang’s official site without any finding.
Someone would suggest me to not declare the instance in class interface at all and always use self.count. first I don’t like this code style, second there are cases your “setCount” method may do something more than just change the instance value,lastly we began our product before this feature is introduced. I don’t want to change exist code’s style.
Does anyone here encounter the same problem? Are there any good ideas and best practice ?
This is not possible. How should the compiler recognize your typo?
Also you should have recognized that it is not necessary to write your own ivar for your property anymore, as @synthesize count = _count; is already enough to reach you iVar via _count later in the code.