为什么Xcode 4自动生成实例变量?

Mem*_*hiZ 5 properties objective-c ios xcode4 synthesize

我来自C#开发,刚刚开始学习Objective-C和Xcode 4.据我所知,"@synthesize"正在替换属性的getter/setter方法,如果你不需要检查/控制值被读或写.

但为什么Xcode 4会自动为我创建一个实例变量?

这还不够:

@synthesize myProperty;
Run Code Online (Sandbox Code Playgroud)

代替:

@synthesize myProperty = _myProperty;
Run Code Online (Sandbox Code Playgroud)

如果我没有/需要任何getter或setter,为什么我要使用/拥有实例变量而不是实际属性?

提前致谢!

MemphiZ

编辑:

我知道@synthesize正在取代getter/setter,但这部分有什么用= _myProperty;呢:?如果我可以直接使用"myProperty",为什么我想要一个实例变量?如果setter例如检查值的条件,我会理解使用"_myProperty".如果我想跳过此检查,我会使用_myProperty.但是当我使用@synthesize时,我没有一个可以进行检查的setter.那么我为什么要/想要一个实例变量呢?

回答:

请参阅MattyG帖子中的评论!

Mat*_*tyG 14

这是一个用于提醒程序员通过setter和getters访问实例变量的约定.所以,如果你正在使用:

@synthesize myProperty = _myProperty;
Run Code Online (Sandbox Code Playgroud)

然后直接访问变量,你必须写:

_myProperty = something;
Run Code Online (Sandbox Code Playgroud)

要通过它的setter访问变量,你必须写:

self.myProperty = something;
Run Code Online (Sandbox Code Playgroud)

好处是,如果你忘记通过自我访问.那么编译器会警告你:

myProperty = something;  //this won't compile
Run Code Online (Sandbox Code Playgroud)

也见这个问题.