我在编写Mac OS X程序时使用ARC,遇到了一个有趣的问题。 我的.h文件包含以下行:
@property Profile *profile;
(void) setProfile:(Profile *) newProfile;
(Profile *) profile;
变量配置文件在 .h 中声明如下:
Profile *profile;
我的 .m 文件具有以下属性实现:
(void) setProfile:(Profile *) newProfile
{
profile = newProfile;
if (profile)
{
[profileNameTextField setStringValue:profile.name];
}
}
(Profile *) profile
{
return profile;
}
方法setProfile效果很好,配置文件设置为非nil值。 问题是,当 .m 文件中的其他方法尝试访问配置文件时,配置文件为 nil。 有谁知道我可能做错了什么? 我变了
@property Profile *profile;
自
@property (nonatomic, strong) Profile *profile;
仍然没有运气。 谢谢大家。
我的猜测是变量名称存在冲突。拥有一个属性是一种不好的做法,它支持 ivar 具有相同的名称。我不是 10% 确定,但您的代码可能会被解释为具有两个不同的"配置文件"成员。
如果在代码中使用
x = profile; // access to the variable
x = self.profile // access the property
通常支持该属性的变量以 _ 为前缀,因此默认情况下,属性 profile
以一个名为 _profile
的变量作为后盾。
您可以通过使用 @synthesize
关键字显式设置支持变量来覆盖默认行为。
我只会删除profile
变量并保留该属性。还要替换 getter 和 setter 中的 profile
_profile
,如果编译器仍然抱怨,请使用 @synthesize。