当我宣布NSString
时,我只是这样做:
NSString * my_string; (in interface of my .h)
如果我想允许从其他类访问此字符串,我会以这种方式添加属性
property (nonatomic, strong) NSString *my_string;
我写了合成
synthesize my_string; (in .m)
现在我有一些问题:
my_string
作为属性,我是否必须始终使用self.
?@synthesize
? (因为我看到有时候没有必要。答案 0 :(得分:2)
如果我使用属性,我还必须在界面中使用简单声明吗?
不,通常你只想使用@property
(它会悄悄地为你添加一个实例变量)。
如果我使用my_string作为属性,我必须始终使用self。前?
你不需要,但你应该。使用self.
调用访问器方法来获取变量内容。不使用self.
直接访问实例变量。因此,如果您将来添加自定义访问器,则需要重构。
通常,您将多次重复使用同一个变量。在这种情况下,调用self.
,但使用它来设置一个局部变量,然后在整个方法中使用(这样只能调用一次访问器)。
如果我使用属性,是否有必要为每个属性编写@synthesize? (因为我看到有时候没有必要。
不,编译器会添加:
@synthesize propertyName = _propertyName;
对你而言,这是一个很好的方法(将属性名称与实例变量名称分开)。
答案 1 :(得分:0)
答案 2 :(得分:0)
在所有情况下使用属性变得越来越合适。如果您不希望将它们公开给外部类,则可以在.m文件内的标头扩展内声明“私有”属性。假设您在.h文件中有一个名为name的属性:
@property (nonatomic, strong) NSString *name;
此类的用户可以通过在.m文件中使用theVariable.name来访问name属性,您需要使用self.name访问此属性。但是你可以这样访问ivar:
_name = @"John Smith"
这将跳过酒店并直接前往伊瓦尔。在这种情况下,如果你有一个覆盖的setter,它就不会被调用。
您不再需要合成属性。 Xcode会自动提供:
@synthesize name = _name;