iphone - Objective-C:为什么@synthesize 预见到一个赋值?

标签 iphone objective-c ios

我注意到 @synthesize 指令允许对其接收的属性进行赋值,但我不明白为什么。

我的意思是,我在应用程序委托(delegate)的实现文件中有:

@synthesize window=_window;

如果我必须将属性合成到 View Controller 的 .m 文件中,我可以简单地写:

@synthesize messageString;

不为其分配 _messageString

我不明白为什么我需要前一种语法。

最佳答案

如前所述,这是将 ivar 设置为与访问器分开。因此,在上面的 window=_window 代码中,您的访问器将如下所示。

- (UIWindow *)window
{
     return _window;
}

- (void)setWindow:(UIWindow *)w
{
     [w retain];
     [_window release];
     _window = w;
}

将ivar 和属性分开的通常原因是为了防止在子类中发生冲突。这样,子类可以创建一个名为 window 的变量,而不会与父类(super class)“window”发生冲突,因为它实际上是 _window。

关于iphone - Objective-C:为什么@synthesize 预见到一个赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5714492/

相关文章:

iPhone 编译拇指

iphone - iPhone 应用程序中的 I18n 是否需要所有这些步骤?

objective-c - NSView 与 CAgradientlayer

ios - 如何使用 Swift 3 存储在 Firebase 中创建另一个新用户的已登录用户的 UID?

ios - UIButton将无法正确移动

iphone - 在 Xcode 4.2 for iOS 项目中安装 Core-Plot

iphone - Objective c- 是否可以在不使用 GPU 的情况下制作动画?

ios - 从其他类访问方法 - 这是合法的方式吗

iPhone - 将当前模态视图嵌套在另一个模态视图中

ios - 执行segue会抛出错误