window = _window

时间:2011-10-12 05:17:02

标签: iphone objective-c core-data

我一直在为iPhone上的Core Data做一些教程,但似乎都没有。幸运的是,其中一个教程网站提供了源代码和一个不断弹出的问题(希望解释为什么所说的教程不起作用),是这一行:

@synthesize window = _window;

我的tableview文件中会自动生成大约6个这样的合成,但是没有一个教程使用它们,这给我带来了很多错误。工作源代码中的行是:

@synthesize window;

那么,为什么呢?我在网上看到@synthesize的第一个版本用于内存管理,但似乎没有人使用它。

4 个答案:

答案 0 :(得分:1)

这里唯一的区别在于实例变量在自动生成时的命名方式。

使用此版本:

@synthesize window = _window;

您有效地获得了这些(假设您尚未将@property设置为readonly):

UIWindow *_window;
- (UIWindow *)window;
- (void)setWindow:(UIWindow *)aWindow;

使用其他版本:

@synthesize window;

你明白了:

UIWindow *window;
- (UIWindow *)window;
- (void)setWindow:(UIWindow *)aWindow;

第二个版本相当于:

@synthesize window = window;

答案 1 :(得分:1)

这样的陈述:

@synthesize window = _window;

表示window是映射到实例/成员变量_window的属性。

Wheras

@synthesize window;

相同
@synthesize window = window;

答案 2 :(得分:0)

我在使用的教程中遇到了同样的问题。

对于我的东西,我可以让它以最小的改变工作的方式是添加 头文件接口部分中的UIWindow *window;,因为这并没有被Xcode自动添加,但教程的内容是预期的。

然后我改变了调用的部分

[window addSubview:tabBarController.view];

[self.window addSubview:tabBarController.view];

这似乎现在有效。我正在阅读的教程基于Xcode的早期版本,因此我认为事情已经发生了变化。 UIWindow行未自动添加,Xcode已开始使用_window作为自己的东西。

但是,如果有人能给出一个更明确的解释,我会很高兴,因为我在黑暗中磕磕绊绊。

答案 3 :(得分:-2)

请勿使用单个前导下划线作为您的ivar或方法名称的前缀。这是一个Apple 内部编码约定,他们这样做是为了让他们的符号不会与你的符号冲突。

如果你综合一个属性并告诉它在已经有一个名为_window的ivar的UIKit类的任何子类中使用_window,那么你将会在套件中破坏代码。您可能会碰到的其他非常常见的ivar名称是_delegate_target_view