OC中,成员变量和属性区别

在OC中,首先看一下成员变量和属性的声明

成员变量的表示如下:

#import 

@interface animal : NSObject
{
    @public NSString *name;
    @public NSString *height;
}
@end

这里的name 和 height 就称之为OC的成员变量。

而属性的声明如下:

#import 

@interface animal : NSObject
@property (nonatomic,strong) NSString *name;
@property (nonatomic,strong) NSString *heigth;

@end

这中间的name 和 height 就不是成员变量的声明了,而是属性的声明。

那么,成员变量和属性在.m文件中有什么区别呢?
当使用属性时,.m文件会自动生成get和set方法,这个时候编译器会自动生成一个成员变量_name和_height。所以在使用属性声明时,使用self.name和_name,是没有区别的。

然而,如果在.h文件中使用的是成员变量,在.m中使用self.name或者self.height就会报错,这是因为OC中的.语法实际上是进行的方法的调用。当self.name=@”xxxx”时,调用的是name的setter方法,而NSString *str = self.name调用的是name的getter方法。但是我们并没有定义这些方法,所以会报错,应改成self->name。

你可能感兴趣的:(iOS)