我无意中发现了这个代码从苹果:为什么Apple创建ivars如果@synthesize创建它们?
@interface TiltShift : CIFilter
{
CIImage *inputImage;
NSNumber *inputRadius;
}
@property (retain, nonatomic) CIImage *inputImage;
@property (copy, nonatomic) NSNumber *inputRadius;
@end
@implementation TiltShift
@synthesize inputImage;
@synthesize inputRadius;
苹果创造的属性和在同一时间创建实例变量和合成它们。我的问题是:苹果为什么要这样做?
据我知道的Xcode甚至会没有@synthesize
创建的声明的属性下划线的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。
而这不仅仅是苹果。我在网上看到了很多来自其他开发人员的代码,这样做,我已经看到了最近的代码。在我看来,这是不好的代码,因为它不可能辨别“真正的”ivars和备份属性的ivars。
创建这样的代码是否有意义?
非常旧的示例代码。这几乎是几年前所需要的。 Objective-C几年前发展起来,只需要'@ property'就行了。 – rmaddy