@synthesize 所做的只是为您的属性生成访问器(setter 和 getter)并创建一个具有相同名称的实例变量。使用等号的新增步骤:
@synthesize mystring = _string;
... 为您将实例变量重命名为 _string (或您选择的任何名称,下划线只是苹果约定)。这是一个很好的做法,因为让实例变量与访问器共享相同的名称可能会出现问题。拥有下划线可以让您区分两者。
这基本上是生成的(假设 ARC 为 ON):
// getter
- (NSString*)mystring
{
return _string;
}
和
// setter
- (void)setMyString:(NString*)myString
{
_myString = myString;
}
您可以在 init 方法中初始化您的属性(使用 self.propertyName):
-(id)init
{
self.myString = @"Something"; // or use an alloc init method in the class
}
或者你可以像这样覆盖getter来懒惰地初始化它:
- (NSString*)myString
{
if (!_myString) { // same as saying if nil and therefore doesn't exist yet
_myString = @"Something";
}
return _myString;
}
还请注意,您不需要单独声明变量(即您不需要 NSString* mystring)。声明属性时,只需使用 strong 或 weak 代替 retain。
您应该直接访问实例变量的唯一位置是在访问器中,这允许您通过单个网关控制对其的所有操作。在类中使用访问器(即 self.mystring)的开销非常小。当然,您不必这样做,但这是一种很好的做法。