2

synthesize有时我们可能会在语句中显式指定实例变量的名称,例如,

SomeViewController.h,

//....
@property (nonatomic, retain) NSObject *variable;
//....

SomeViewController.m,

//....
@synthesize variable = _variable;
//....

但是,如果实例变量将被隐式命名为,_variable即使我们简单地将其命名为:

@synthesize variable;

SomeViewController.m.

任何人都可以分享一些关于为什么有必要的想法吗?谢谢 :D

4

1 回答 1

9

Just to avoid confusion (see comments): Using the = _variable part of the @synthesize is not required, nor is the @synthesize itself required any more.

This effort is only requied, when you want to link the property to a specific instance variable. With earlier Objective-C versions this part of the statement was required to set the name to something different from the property name, so when you want to call the iVar _variable and the property variable. The default would be variable (unlike your question). Without that = something ivar and property have the same name.

BTW, there is nothing wrong with using the same name for both. But having different names, a leading _ would do, makes it more clear to the programmer whether he/she accesses the ivar directly or though the accessor methods. Sometimes this is of vast importance, especially when not using ARC. Therefore it helps avoiding errors.

With current Objective-C, however, you could omit the @synthesize statement at all and go with the defaults in that case. The default automatically synthesized instance variable name would have a leading _ so _variable in your example.

于 2013-06-10T08:38:39.817 回答