我在 .h 文件的接口方法中定义了一个变量,如下所示......
@interface ......{
int a;
}
然后我在 .m 文件中使用它,它工作正常....
我也将代码修改为
@interface ......{
int a;
}
@property(nonatomic) int a;
在 .h 文件中,在 .m 文件中,我将 int 值设置为
@synthesize a;
现在它也工作正常......
两种情况有什么不同?
我在 .h 文件的接口方法中定义了一个变量,如下所示......
@interface ......{
int a;
}
然后我在 .m 文件中使用它,它工作正常....
我也将代码修改为
@interface ......{
int a;
}
@property(nonatomic) int a;
在 .h 文件中,在 .m 文件中,我将 int 值设置为
@synthesize a;
现在它也工作正常......
两种情况有什么不同?
在第一种情况下,您使用字段,可以直接访问它。在第二种情况下,您正在使用访问器定义 Objective C 属性。
通过声明您的“a”属性,您允许将 int 存储在您的类中,并且您可以从您的类中访问它 - 但只能在您的类中。如果您希望它成为其他对象可以访问的属性(公共属性),那么您需要 getter 和 setter 方法。
通过在 your 中将其声明为 a并在@property
your 中.h
使用,您将自动创建两种方法:@synthesize
.m
[myObject a]; // your getter
[myObject setA:50]; // your setter
这里要记住的一件事是,即使在您的类中使用综合属性通常也是一个非常好的主意,因为它们会处理您的内存管理。例如,当您将 as 标记@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
如果您定义和综合一个属性,那么您还可以使用 访问该值int value = self.a; self.a = newValue;
。这也使得其他对象可以访问该变量。如果没有该属性,您将无法使用self.
来获取变量,并且其他对象也无法自动获取该变量。
当您定义和合成一个属性时,您告诉编译器为它生成 ivar 和访问器方法(-(int)a; 和 -(void)setA:(int)a_;)。这些方法可以使用点语法显式或隐式调用:
self.a = num; // [self setA:num] gets called