我一直找不到关于这个主题的任何信息,而且我所知道的大部分信息都是完全偶然的(并且花了几个小时试图弄清楚我的代码为什么不起作用)。在学习objective-c时,我发现大多数教程都使用相同的名称制作变量和属性。我不明白其重要性,因为似乎该属性完成了所有工作,而变量只是坐在那里。例如:
测试.h
@interface Test : NSObject {
int _timesPlayed, _highscore;
}
@property int timesPlayed, highscore;
// Methods and stuff
@end
测试.m
@implementation Test
@synthesize timesPlayed = _timesPlayed;
@synthesize highscore = _highscore;
// methods and stuff
@end
我知道的
1)好的,所以今天我发现(经过数小时的困惑),无论您对属性做了多少更改,highscore = 5091231
当您尝试调用 [test highscore] 时它都不会改变任何东西,因为它仍然会返回 _highscore 的值其中(我认为)是在 test.h 中设置的 ivar。所以 test.m 中所有变量的变化都需要改变 _highscore 而不是 highscore。(如果我在这里错了请纠正我)
2)如果我理解正确(我可能不理解), test.h 中设置的 ivars 代表实际内存,而 @properties 只是访问该内存的方法。因此,在实现之外,我无法访问 _highscore 而不通过该属性。
我不明白的
基本上我对这种情况不了解的是我是否需要使用 ivars 或者我是否可以只使用 @property 和 @synthesize。似乎 ivars 只是额外的代码,除了让我感到困惑之外,它并没有真正做任何事情。我见过的一些最近的 tuts 似乎没有使用 ivars,但后来有些使用了。那么这只是编码偏好还是实际上很重要?我曾尝试通过 Apple 的文档进行搜索,但我在其中迷失了方向,似乎从未找到我想要的东西。任何指导将不胜感激。