一、学习属性我们首先要对属性有一个清晰地认识,什么是属性?属性和我们熟知的实例变量有用什么区别呢??
实例变量和属性是一个包含关系,实例变量中包含属性,而属性是作为实例变量的子集
这种情况是需要为您举例子的,比如 汽车 是一个类(一个集合)
1.您指出了一辆特定的车(请注意,这里是指的单个的一辆车),那么这辆车属于 汽车 这个类,这辆车您就可以理解为是汽车这个类的实例变量(指出了一个例子,实例也可以叫做 对象 )
2.而您可以看到这辆车的颜色、车轮、发动机等等的车身上的部件,我们就可以称这些部件为 属性。
3.而汽车是如何发动的,如何跑的,关于这些 我们可以称作它们是这辆车的方法,当然所有的车都可以发动,都可以跑,所以这些方法也是属于汽车的这个类(集合的)
如果用程序的角度编写的话,比如您设置了一个父类是NSObject的自定义类,就叫做Car
那么这个Car中,您可以通过在头文件用@property或者大括号'{}'直接声明一些变量,比如颜色、厂家等等,这些用@property或者大括号声明的变量称作Car这个类的属性
而您进入主程序,设置一个Car类的变量,并声明了一个内存空间给它
Car * instanceCar = [[Car alloc]init];
那么这个"instanceCar"就是一个 实例对象(也是一个变量),这个变量是属于Car这个类的,所以这个变量可以使用Car类中所有的属性,也就是说,您可以用instanceCar.某属性的方法直接为这些变量赋值,而赋值后instanceCar这个变量就是一个独一无二的变量,是一个已经具体化的汽车的例子,所以称作实例对象(变量).
二、了解了什么是属性后,我们要学习为什么用属性?属性有什么作用?
我们通过声明属性(@property)来摆脱繁琐的setter和getter方法的创建。@property声明与实现文件中的另一个声明@sythesize相结合,来完成setter和getter方法的创建。@property生成设置器和访问器方法的声明,@synthesize 生成设置器和访问器方法的实现。
注意:只有当访问器不存在的时候, @synthesize才会自动生成访问器,所以,即使是使用 @synthesize声明了一个属性,你仍然可以实现自定义的getter和setter。
属性是设置实例变量的方法,也是获取实例变量的方法。
三、属性注意事项:
#import "Person.h"
int main(int argc, const char * argv[]) {
p.name = @"王三";//默认调用name的set方法
NSLog(@"==%@",p.name);//默认调用get方法
[p sayHi];
}
return 0;
NSString *name;//对应注意1
@property (nonatomic, strong) NSString *name;
NSLog(@"我是%@",name);
NSString *name;
}
@property NSString *name;
-(void)sayHi;
NSLog(@"--%@",_name);
NSLog(@"--%@",self.name);
NSString *_nam8e;
}
NSLog(@"--%@",_name);
NSLog(@"--%@",self.name);
-(void)sayHi{