属性语法,我是直接访问ivar还是通过getter / setter?

时间:2011-07-02 22:45:17

标签: objective-c

我是objective-c的新手,在代码中以各种方式调用属性时,我对访问的内容感到有些困惑。

// MyClass.h
@interface MyClass : NSObject {
}
@property ( nonatomic, retain ) NSString *name;

@end

//MyClass.m
#import "MyClass.h"

@implementation MyClass
@synthesize name;
// other code...
@end

我不清楚我是否正在使用以下语法访问支持ivar或通过getter和setter(我将包括我对其认为正在做的假设):

  • name = @"Geoff";这是通过属性设置器还是直接设置ivar?
  • self.name = @"Geoff";通过setter
  • self->name = @"Geoff;"直接访问
  • [ name release ];这是直接访问ivar还是通过getter?

我知道这可以通过在合成语句中设置ivar来消除歧义:@synthesize name=_name就像在很多XCode 4 IOS模板中一样。

1 个答案:

答案 0 :(得分:1)

  • name = @"Geoff";正在直接设置ivar。
  • [ name release ];正在直接访问ivar。

如果您没有看到self.并且您没有调用获取或设置变量的方法,那么您正在访问ivar。

有关详细信息,请参阅The Objective-C Programming Language