[objective-C] 07.属性

掌握setter、getter的作用及书写格式
  1. 什么是setter、getter
    在OC里,为实例变量赋值的方法称作setter(设置器)
    读取实例变量值的方法称作getter(访问器)
    我们之前写的那些赋值取值的方法称作setter和getter
  2. setter、getter的书写格式
    OC里规定了setter和getter的书写格式
    如果一个实例变量是int age; 或者int _age; setter的书写格式如下:-(void)setAge:(int) age, 即set+首字母大写的实例变量名(忽略下划线)
    getter的书写格式如下:-(int)age; 即返回值类型与变量类型一致,方法名与实例变量名相同(忽略下划线)
  3. setter、getter与实例变量的关系
    无论setter还是getter内部操作的是实例变量
    每一个实例变量都需要一堆setter和getter方法



掌握setter、getter与实力变量的关系
  1. 无论setter还是getter内部操作的是实例变量
  2. 每一个实例变量都需要一堆setter和getter方法



掌握iOS属性的使用
  1. 属性的声明:使用@property声明属性(例如:@property NSString *name;)
    相当于@interface中声明了两个方法:
    - (void)setName:(NSString *)name;

    - (NSString *)name;

  2. 属性的实现:使用@synthesize实现属性(例如:@synthesize name = _name)
    相当于@implementation实现了:
    - (void)setName:(NSString *)name;

    - (NSString *)name;




掌握属性的Attribute
  1. OC提供属性的目的是为了简化程序员编码
    为属性提供了一些关键字以控制setter、getter的实现细节
    这些关键字我们可以成为属性的属性(attribute)
    一共3大类attribute:
  2. 属性的3大类:
    第一类:读写性控制(readonly、readwrite、setter、getter)
    如果读写性控制的关键字是readonly,是告诉编译器,只声明getter方法(无setter方法),例如:@property (readonly) NSString *name; // 等价于- (NSString *) name;
    如果是readwrite,告诉编译器,既声明setter又声明getter。例如:@property(readwrite) NSString *name; // 等价于- (NSString *)name;  - (void)setName:(NSString *) name; readWrite是读写性的默认设置

    第二类:原子性控制(nonatomic、atomic)
    如果原子性的关键字是atomic。setter、getter方法在多线程访问下是绝对安全的,即setter、getter内部做了多线程访问处理。原子性控制的默认设置是atomic
    如果原子性控制的关键字是nonatomic。setter、getter方法内部不会做多线程访问处理,仅仅是普通得setter、getter方法
    在原子性控制上,我们通常使用nonatomic
    程序开发过程中,setter、getter处处都在用,如果使用atomic,需要不断的对setter、getter加锁解锁以保证线程访问安全,会很占用系统资源,降低系统性能
    同城设置为nonatomic,某些属性需要线程安全的时候,才定义为atomic
    例如:@property (readwrite, nonatomic) NSString *name; // 等价于 - (NSString *) name; - (void)abc:(NSString *) name;

    第三类:语义设置(assign、retain、copy)
    如果语义设置的关键字是assign。setter、getter内部实现是直接赋值
    例如:@property (nonatomic, assign) NSString *name;
    - (void) setName:(NSString *) name {_name = name};
    - (NSString *)name {return _name};
    在如果语义设置的关键字是retain。setter、getter的内部实现会做内存优化
    例如:@property (nonatomicretainNSString *name;
    - (void)setName:(NSString *) name {
    };
    - (void)setName:(NSString *)name

    {

         if (_name != name) {

             [_name release];

             _name = [name retain];

         }

    }

    - (NSString *)name

    {

         return _name;

    }

    如果语义设置的关键字是copy。setter、getter的内部实现也会做内存优化。
    例如: @property  ( nonatomic copy NSString  *name;

    - (void)setName:(NSString *)name

    {

         if (_name != name) {

             [_name release];

             _name = [name copy];

         }

    }

    - (NSString *)name

    {

         return [[_name retainautorelease];

    }


    如果属性是基本数据类型(比如int, float等)属性的语义设置使用assign
    如果属性是对象类型(比如NSString、NSArray等)属性的语义设置使用retain
    如果属性是对象类型并且想得到参数copy,使用copy关键字



掌握OC点语法
  1. 点语法是Objectice-C 2.0中定义的语法格式。提供了一种便捷的属性访问方式
  2. 凡是符合系统默认的setter、getter书写格式的方法都可以使用点语法
  3. 例如:
    [person setName:@"小七"]; 等价于:person.name = @"小七";

    NSString *name = [person name]; 等价于:NSString *name = person.name;

  4. 属性是getter、setter方法,点语法是属性的另一种调用格式。



属性是Objective-C的重要语法,属性是一组getter、setter方法,内部对实例变量进行操作。点语法是一种属性的另外一种调用格式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值