// 周四周五学习的内容较多,较紧,所以统一放到了周六自习日总结
// 注: 本节应该是在第八天才讲,提前是因为方便后面更好的使用getter和setter方法,所以提前放到第四天,所以部分内容不完善,将在后期完善.
属性是OC 2.0定义的语法,主要为实例变量提供了setter和getter方法的默认实现
主要简化了程序代码,并且增加了实例变量的访问安全性
声明:使用@property声明属性
// 属性
@property NSString *name;
属性就相当于@interface中声明了两个方法(setter和getter)
实现:使用@synthesize实现属性
@synthesize name = _name;
相当于实现了setter和getter
在现在的代码中并不用写,@synthesize 是在Xcode4.5以后开始不写的,但是在之前的老工程里,还有大量的@synthesize存在,所以只需要了解
为属性提供了一些关键字来控制getter和setter的实现细节
属性的属性一共可以分为三大类
第一类: 读写性控制
@property(readonly)NSString *name;
// 等价于
-(NSString *)name;
@property(readwrite)NSString *name;
// 等价于
-(NSString *)name;
-(void)setName:(NSString *)name;
注意:readwrite是读写性控制的默认设置
第二类: 原子性
注意: 一般在开发过程中,getter和setter处处在用,如果使用atomic,需要不断的加锁解锁来保证线程安全访问,会占用过多资源. 所以通常设置成nonatomic,当需要线程安全的时候,在定义atomic
第三类 : 语义设置
- assign ,一般是NSInteger,CGfloat会使用,因为他们在栈区,不需要内存管理,所以用assign
- retain ,一般是对象类型会用到,比如我们自己写的类,还有NSArray会用
- copy , 一般只有字符串会使用copy
@property(nonatomic,copy) NSArray *arr;
@property(nonatomic,assign) NSInteger age;
@property(nonatomic,assign) CGFloat score;
@property(nonatomic,retain) NSString *color;
点语法是OC 2.0中定义的语法格式,提供了便捷的属性访问方式
只要是符合系统默认的setter 和 getter书写格式的方法都可以使用点语法
[stu setStuName:@"abc"]
等价于
stu.stuName = @"abc";
注意:属性是一对getter和setter方法,点语法是属性的另一种调用格式
key - value - coding 键值对编码
把属性名看成是kvc中的key键,把要修改的值看成是value,然后通过KVC的方法,把值赋给指定的key
Student *stu = [[Student alloc] init];
[stu setValue:@"abc" forKey:@"stuName"];
NSLog(@"%@",stu.stuName);
NSLog(@"%@",[stu valueForKey:@"stuName"]);
版权声明:本文为博主原创文章,转载请注明原文地址
原文地址:http://blog.csdn.net/u011752406/article/details/46945449