iOS – 开始iOS教程 – 变量之前的下划线?

前端之家收集整理的这篇文章主要介绍了iOS – 开始iOS教程 – 变量之前的下划线?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我开始学习如何在一分钟内开发一些iOS,而我目前正在开始使用Apress开始的 IOS6书.

在第二章中,有一个简单的教程,显示两个按钮和一个标签,按下按钮时,标签上会显示按下一个按钮.

我已经完成了教程,但它提出了一个我无法找到答案的问题.

本教程使用ARC(自动引用计数),以防万一.

这是代码,

文件

#import <UIKit/UIKit.h>

@interface MTMViewController : UIViewController


@property (weak,nonatomic) IBOutlet UILabel *statusLabel;


- (IBAction)buttonPressed:(UIButton *)sender;

@end

和m文件

#import "MTMViewController.h"    

@implementation MTMViewController

- (IBAction)buttonPressed:(UIButton *)sender {


    NSString *title = [sender titleForState:UIControlStateNormal];

    NSString *plainText = [NSString stringWithFormat:@"%@ button pressed.",title];

    statusLabel.text = plainText;


}

@end

以上就是它在书中出现的情况,但是当在Xcode中进行教程时,我无法使用以下行编译:

statusLabel.text = plainText;

而是必须将其更改为:

_statusLabel.text = plainText;

当我完成这个代码编译并运行良好,我试图找出为什么会发生这种情况,通过回顾教程,看看我是否错过任何东西,但我没有看到任何东西.

任何人都可以解释为什么书中的代码没有编译,为什么我必须在变量的前面添加下划线?这是正确的还是我做错了什么?

解决方法

statusLabel.text = plainText;失败是因为您没有正确访问该属性.为了通过生成的getter / setter访问它,你需要在self之前.因为属性(及其setter / getters)属于self的实例.所以相反它将是self.statusLabel.text = plainText;

_statusLabel工作的原因是因为这是保存属性值的基础变量.在以这种方式访问​​变量时,您正在绕过生成的setter / getter.通常,您应该使用self.propertyName,因为这将尊重您作为属性定义的一部分提供的关键字(一个很好的示例是如果您使用atomic关键字,因为生成的setter和getter将正确放置@synchronized块底层实例变量).

如果您不手动合成属性,Xcode的最新版本会使用前置下划线创建变量名称(这是一件好事,以前人们不得不手动合成).如果您愿意,可以使用@synthesize statusLabel = m_statusLabel定义自己的基础变量名称.这意味着您可以使用m_statusLabel而不是_statusLabel来访问它.除非有迫切需要,否则通常不需要这样做; Apple建议使用前置下划线.

在初始化方法和解除分配方法时应该使用底层变量,因为在代码中此时生成的setter / getter可能不完整.

原文链接:https://www.f2er.com/iOS/331822.html

猜你在找的iOS相关文章