我在.h文件的接口方法中定义了一个变量...

@interface ......{
  int a;
}

然后我在.m文件中使用它,它可以正常工作。

我也将代码修改为

@interface ......{
  int a;
}
@property(nonatomic) int a;

在.h文件和.m文件中我将int值设置为

@synthesize a;

现在也可以正常工作...

两种情况之间有什么不同?

有帮助吗?

解决方案

通过声明您的“ A”属性,您允许INT存储在课堂中,您可以从班级中访问它 - 但是 只要 在您的班上。如果您希望它是其他对象(公共属性)可访问的属性,则需要Getter和Setter方法。

通过将其宣布为 @property 在你的 .h 并使用 @synthesize 在你的 .m, ,您会自动创建两种方法:

[myObject a]; // your getter
[myObject setA:50]; // your setter

要记住的一件事是,即使在您的班级中,也可以使用Sythesised属性是一个很好的主意,因为它们会照顾您的记忆管理。例如,当您标记 @property 作为 retain:

objectProperty = anObject; // just accessing locally, no memory management
self.objectProperty = anObject; // [anObject retain] will be called
self.objectProperty = nil; // [anObject release] will be called

其他提示

在第一种情况下,您使用字段,直接访问它。在第二种情况下,您将使用登录器定义目标C属性。

如果定义和合成属性,则也可以使用 int value = self.a; self.a = newValue;. 。这也使变量可访问其他对象。没有属性,您将无法使用 self. 要进入变量,并且没有其他对象可以使用该变量的方法。

定义和合成一个属性时,您告诉编译器同时生成IVAR和访问者方法( - (int)a; and - (void)seta:(int)a_;)为其生成。这些方法可以使用DOT语法明确或隐式称为:

self.a = num; // [self setA:num] gets called 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top