加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – Xcode 4.5 Interface Builder将下划线添加到Outl

发布时间:2020-12-14 20:02:08 所属栏目:百科 来源:网络整理
导读:Xcode 4.5是否具有稍微不同的自动生成属性及其关联的内存释放部分(在dealloc和viewDidUnload中)? 我昨天从4.5 Beta 1升级到Xcode 4.5.现在,当我使用Interface Builder创建一个插座时(通过Ctrl,从UILabel拖动到相关的头文件),它会正常在标题中创建@property
Xcode 4.5是否具有稍微不同的自动生成属性及其关联的内存释放部分(在dealloc和viewDidUnload中)?

我昨天从4.5 Beta 1升级到Xcode 4.5.现在,当我使用Interface Builder创建一个插座时(通过Ctrl,从UILabel拖动到相关的头文件),它会正常在标题中创建@property声明:

@property (retain,nonatomic) IBOutlet UILabel *propertyName;

但是,在关联的.m文件中,没有@synthesize声明.

viewDidUnload中的代码是正常的:

- (void)viewDidUnload {
    [self setPropertyName:nil];
    [super viewDidUnload];
}

但是,dealloc中的代码在属性名称上加上_:

- (void)dealloc {
    [_propertyName release];
    [super dealloc];
}

这也意味着我不能正常引用该属性([propertyName doSomething];)

有什么变化吗?或者我不小心碰巧改变了一些设置?

解决方法

是的,Xcode 4.5中的行为略有改变.

… in the associated .m file,there is no @synthesize declaration.

在Xcode 4.5中,@synthesize语句现在是可选的,并且属性是自动合成的.因此,自动生成的IBOutlet属性不再添加@synthesize,因为不再需要它.

… the code in dealloc prepends an _ on the property name

当自动合成属性(没有显式的@synthesize语句)时,相应的实例变量前缀为下划线.这就是为什么它在你的dealloc方法中显示出来的原因.这样实例变量和属性名称不重叠.

This also means I cannot reference the property as normal

不可以.访问实例变量和属性没有改变.所有已更改的是实例变量的默认名称.例如.:

_foo = @"Bar"; // Setting an instance variable directly.
self.foo = @"Bar";  // Setting an instance variable via a property accessor method.

下划线仅仅是一种风格问题,因此您更清楚的是您正在访问实例变量而不是属性.

请注意,您可以自己添加@synthesize语句,这将强制相应实例变量的名称为您想要的名称.同样,如果添加自己的属性访问器方法,则会阻止实例变量自动生成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读