码迷,mamicode.com
首页 > 其他好文 > 详细

OC学习-04-属性

时间:2015-07-19 10:18:42      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:oc   方法   

// 周四周五学习的内容较多,较紧,所以统一放到了周六自习日总结
// 注: 本节应该是在第八天才讲,提前是因为方便后面更好的使用getter和setter方法,所以提前放到第四天,所以部分内容不完善,将在后期完善.

属性

属性是OC 2.0定义的语法,主要为实例变量提供了setter和getter方法的默认实现

主要简化了程序代码,并且增加了实例变量的访问安全性

属性的定义及实现

声明:使用@property声明属性

// 属性
@property NSString *name;

属性就相当于@interface中声明了两个方法(setter和getter)

实现:使用@synthesize实现属性

@synthesize name = _name;

相当于实现了setter和getter

在现在的代码中并不用写,@synthesize 是在Xcode4.5以后开始不写的,但是在之前的老工程里,还有大量的@synthesize存在,所以只需要了解

属性的属性

  • OC中提供属性目的前面提过就是为了简化程序猿编码
  • 为属性提供了一些关键字来控制getter和setter的实现细节

    属性的属性一共可以分为三大类

第一类: 读写性控制

  • readonly,只读,即只声明getter方法
@property(readonly)NSString *name;
// 等价于
-(NSString *)name;
  • readwrite,读写,即为setter和getter方法都声明
@property(readwrite)NSString *name;
// 等价于
-(NSString *)name;
-(void)setName:(NSString *)name;

注意:readwrite是读写性控制的默认设置

第二类: 原子性

  • atomic : setter和getter方法在多线程访问下是绝对安全的,即在setter.getter内部做了多线程访问.是原子性控制的默认设置
  • nonatomic : setter和getter内部不会做多线程的访问处理

注意: 一般在开发过程中,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方法,点语法是属性的另一种调用格式

KVC

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"]);

版权声明:本文为博主原创文章,转载请注明原文地址

OC学习-04-属性

标签:oc   方法   

原文地址:http://blog.csdn.net/u011752406/article/details/46945449

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!