/**************** OC第八讲 属性 ******************/
/**************** 属性介绍 ******************/
//属性是OC 2.0之后出现的语法,为实例变量提供了setter,getter方法的默认实现
//属性的出现简化了程序的代码量,也增加了实例变量访问的安全
/**************** 属性的属性 ******************/
//给属性提供一些关键字,用来控制setter和getter方法的实现细节,这些关键字我们称为属性的属性,属性(attribute)共分为三类:
/*
diyilei:
读写性的控制(readonly, readwrite, setter, getter)
readonly:告诉编译器,只声明getter方法,而没有setter(只能被读取,不能被修改)
readwrite:告诉编译器,既声明getter方法,又声明setter
readwrite是属性读写控制性的 默认修饰词
第二类:
原子性的控制:atomic,nonatomic
atomic:setter和getter方法在多线程中访问是安全的,即系统在setter和getter方法中做了很多多线程安全的处理操作。atomic是原子性控制的默认设置。
nonatomic:setter和getter内部不会做过多的多线程方法面的处理,仅仅是普通的setter和getter方法
在开发过程中 setter和getter方法处处都在使用,如果使用atomic修饰,setter和getter方法内部会做很多多线程安全的操作,会占用较多系统资源,降低系统性能,所以在平常开发性能中,原子性一般设置为atomic,只有在需要线程安全的地方才使用atomic
第三类:
语义设置:(assign,retain,copy)
assign:setter内部实现是直接赋值
retain: setter内部实现会对内存进行优化
如果属性是非对象类型(int,float或者构造类型:结构体等)属性的语义设置用assign
如果属性是对象类型(NSString,NSArray等)属性的语义设置用retain
带*的属性,语义设置用retain
不带*的设置,语义设置用assign
如果属性是对象类型并且想得到参数的copy,使用copy关键字
*/
/**************** 点语法 ******************/
//练习3:使用点语法对teacher类和student类进行赋值取值
//点语法在等号左边是setter方法(赋值),在等号右边是getter方法(取值)
Student *qiao = [[Studentalloc]init];
qiao.name =@"乔";
NSLog(@"name = %@",qiao.name);
qiao.age = 21;
qiao.gender =@"男";
qiao.blood =@"A";
qiao.classname = 6;
qiao.stunum = 13055126;
qiao.hight = 175;
qiao.weight = 64.23;
qiao.schhol =@"XX理工";
qiao.inter =@"不知道这个单词是什么鬼";
qiao.grade = 3;
qiao.major =@"有一个什么鬼";
qiao.nation =@"中国";
qiao.seatnum = 32;
qiao.hometown =@"十三朝古都";
qiao.politic =@"再加一";
qiao.idcardnum = 410325;
qiao.posd =@"原谅我的孤陋寡闻";
qiao.colorofskin =@"孤陋寡闻加一";
qiao.score = 96;
qiao.vision = 666666;