在objective-c中没有成员的属性和访问器方法

时间:2013-02-26 14:24:51

标签: objective-c properties member accessor

我刚刚浏览了链接中的属性文档:http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html “您可以实现自定义访问器方法”一节描述了属性并不总是必须由它们自己的实例变量支持。 fullName的示例也不使用其自己的相应成员。

在定义属性时,编译器是否会隐式创建成员(_propertyName)?

2 个答案:

答案 0 :(得分:0)

如果使用@property创建属性,则会自动创建ivar,其setter和getter由LLVM编译器创建。

当你创建一个ivar时,你必须为它创建一个setter / getter。通常,您使用@property并在编译器上休息。

但是在某些情况下,您可以创建具有不同名称的ivar和属性,并将其引用为:

@synthesize boxDescription=boxName;

现在boxName是boxDescription的访问者,现在您无法在代码中使用boxDescription

答案 1 :(得分:0)

如果覆盖默认的setter和getter,并且你没有提供@synthesize(并且你也不能访问_ivar),编译器不会为你创建变量。在这种情况下,你有一个没有ivar支持的属性。

作为一个非常随机的例子:

@property (nonatomic) int x;

- (int)x
{
  return 1;
}

- (void)setX:(int)x
{
  NSLog(@"%d", x);
}

如果你有其他类的外观,你可以使用这个setter / getter来设置/获取那些更多用户满意的用法。

如果你没有覆盖set / getter,现在@synthesize不再是强制性的,默认情况下编译器创建一个名为_propertyname的ivar,你可以通过@synthesize prop_name=ivar_name覆盖这个行为