如果@synthesize创建它们,为什么Apple会创建ivars?

时间:2016-12-04 19:22:05

标签: objective-c ivar

我偶然发现了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备份属性。

创建这样的代码是否有意义?

0 个答案:

没有答案