现代Objective-C和@synthesize

时间:2013-03-22 16:30:45

标签: objective-c synthesize

我正在尝试将我的代码转换为现代Objective-C风格。我在这里阅读http://www.techotopia.com/index.php/The_Basics_of_Modern_Objective-C“:”然而,在Modern Objective-C的情况下,默认情况下会进行综合,因此不必使用@synthesize声明。使用默认属性合成时,可以使用前缀为下划线的属性名称从代码中访问实例变量属性。“

但是,我有:

Relationship.h

@interface Relationship : NSObject <NSCoding>
//...
@property(nonatomic, weak) Person* first;
//...
@end`

OtherRelationship.h

#import "Relationship.h"

@interface OtherRelationship : Relationship

@end

OtherRelationship.m

#import "OtherRelationship.h"

@implementation OtherRelationship

@synthesize first = _first;

- (void)foo
{
NSLog(@"%@", _first);
}

它正在发挥作用。但是当我删除

 @synthesize first = _first;

我得到“使用未声明的标识符'_first'”错误。继承变量不能用于自动合成,还是我应该在其他地方寻找问题?

1 个答案:

答案 0 :(得分:3)

超类中的支持ivar是@private到子类。也就是说,子类可以调用self.first,但不是_first。如果您想再次使用@synthesize,请使用其他名称,因为您无法引用_first。例如,替换为@synthesize first = _ffirst;或只删除@synthesize。