属性前述:
1.对象通过访问器来进行取值 如下:
Personone *per=[[Personone alloc]init];
[per setName:@"你好"];
NSLog(@"%@",[per name]);
2.属性一共做了三件事
(1)声明了设置器setter和访问器getter
(2)实现了设置器和访问器
(3)声明了一个成员变量,成员变量命名会在属性前面加一个下划线
3.具体的数据的存储还是成员变量来完成,属性只不过帮助程序员做一些繁琐的
工作,简化代码
属性的声明部分:
1.@property NSString *name;//这是定义一个特征属性 每个特征都要
一一写出来 不可以多个特征写在一起
2.属性的属性
(1)读写性控制:readonly,readwrite
readonly设置之后,属性就没有setter方法,默认是readwrite
setter和getter的作用是给设置器和访问器的方法重命名
注意:设置器在名的设置的时候不可以忘记冒号 如下:
@property(setter=nihao:,getter=buhao)NSString *hobby;
(2)原子性控制
通过原子性atomic来监控事务在整个过程中有没有完成,但是一般来几
个我们就是对数据简单的赋值,一般这部分我们用非原子性noatomic
(3)语义设置(copy assign retain)
retain一般是对象类型会用到,比如我们自己写的类,还有NSArray会用
assigh一般是NSInteger,CGFloat会使用,因为他们在栈区,不需要内
存管理,所以用assigh
copy一般只有字符串会使用copy
(4)特征
学生的姓名
@property(nonatomic,copy)NSString *stuName;
学生年龄
@property(nonatomic,assign)NSInteger stuAge;
学生成绩
@property(nonatomic,assign)CGFloat stuScore;
学生有一个人的属性
@property(nonatomic,retain)PersonOne *per;
学生的有一个数组的属性
@property(nonatomic,retain)NSArray *arr;
属性的属性
@property(readonly,getter=isSelected,assign)BOOL
selected;
行为
-(void)sayHi;
属性实现部分:
1.关键字是@Synthesize 但是在XCode4.5之后就开始不写了,所以在之前
的老的工程里还有大量的@Synthesize
2.@Synthesize name=_name;//前面是属性名后面是对应的成员变量
3.方法:
-(void)sayHi
{
NSLog(@"你好");
}
点语法
1.针对对象的属性,我们可以使用点语法来获取对象的内容,也可以进行设置
stu.stuName=@"崔某";//赋值
NSLog(@"%@",stu.stuName);//取值
2.通过点语法,可以对属性进行操作,大量节省代码
3.离等号近的是setter方法,其余都是getter
kvc—key-value-coding
应用方法:把属性名看成kvc中的key键,把要修改的值看成value,然后通过kvc的方法把值赋值给指定的key
如下:
[stu setValue:@"崔某"forkey:@"stuName"];
NSLog(@"%@",stu.stuName);
NSlog(@"%@",[stu valueForKey:@"stuName"])
结果:
2015-07-29 17:16:33.730 OC04-属性[2681:303] 崔某
2015-07-29 17:16:33.764 OC04-属性[2681:303] 崔某