基本目标C定义和合成属性

时间:2010-11-25 13:07:11

标签: objective-c properties

我已经和Objective C一起工作了几个月,感觉我可能知道它的1%,并且理解甚至更少...... 无论如何,我有两个适度流行的游戏,并且每天都在学习更多。

当我第一次开始时,我了解到定义属性的方法是对属性和实例变量使用相同的标识符,如下所示:

code.h:

@interface MyClass : UISomething {
    NSString *myPropName;
}

@property (nonatomic, retain) NSString *myPropName;
@end

code.m

@synthesize myPropName;

最近我看到使用了以下内容,其中实例变量的名称与属性不同,然后在实现中将属性设置为实例变量:

code.h:

@interface MyClass : UISomething {
    NSString *_myPropName;
}

@property (nonatomic, retain) NSString *myPropName;
@end

code.m:

@synthesize myPropName = _myPropName;

是否有理由不对属性和实例变量使用相同的标识符?

谢谢! Hanaan

1 个答案:

答案 0 :(得分:2)

  

是否有理由不使用相同的   属性的标识符和   实例变量?

不是真的。有些人喜欢使用下划线为实例变量添加前缀的约定。 (对我来说似乎毫无意义。)其他人喜欢更改布尔变量的属性名称:

@synthesize isEmpty = empty;

您可能还希望为实例变量使用较短的标识符,并为属性(audioPlayer = player)使用更具描述性的名称。最后一个应用程序浮现在脑海中,将变量重命名为协议:

@interface LowLevelAudioPlayer : NSObject <AudioLevelProvider> {…}

@interface Jukebox : NSObject {
    LowLevelAudioPlayer *player;
}

@property(readonly) id <AudioLevelProvider> levelMeter;
@synthesize levelMeter = player;

这里重命名变量是有益的,因为您只提供对其中一个方面的访问。