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

来源:互联网 发布:麒麟外推软件 编辑:程序博客网 时间:2024/05/23 20:45

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

成员变量的表示如下:

#import <Foundation/Foundation.h>@interface animal : NSObject{    @public NSString *name;    @public NSString *height;}@end

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

而属性的声明如下:

#import <Foundation/Foundation.h>@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。

0 0
原创粉丝点击