我偶然发现了Apple的这段代码:
@interface TiltShift : CIFilter
{
CIImage *inputImage;
NSNumber *inputRadius;
}
@property (retain, nonatomic) CIImage *inputImage;
@property (copy, nonatomic) NSNumber *inputRadius;
@end
@implementation TiltShift
@synthesize inputImage;
@synthesize inputRadius;
Apple正在创建属性,同时创建ivars并合成它们。我的问题是:为什么Apple这样做?
据我所知,即使没有@synthesize
,Xcode也会为声明的属性创建下划线ivars。因此,我们已经创建了_inputImage
和_inputRadius
,而另一个奇怪的事情是,鉴于此代码,Xcode将如何知道Apple希望将属性与没有下划线的ivars相关联。
我会这样做:
@interface TiltShift : CIFilter
{
// CIImage *inputImage;
// NSNumber *inputRadius;
}
@property (retain, nonatomic) CIImage *inputImage;
@property (copy, nonatomic) NSNumber *inputRadius;
@end
@implementation TiltShift
// @synthesize inputImage;
// @synthesize inputRadius;
并且有下划线ivars。
这不仅仅是Apple。我在网上看到了很多来自其他开发人员的代码,我已经看到了最近的代码。在我看来,这是一个糟糕的代码,因为它无法辨别“真正的”ivars和ivars备份属性。
创建这样的代码是否有意义?