zoukankan      html  css  js  c++  java
  • 属性

    ---恢复内容开始---

    属性Objective-C 2.0定义的语法,为实例变量提供了setter

    getter⽅方法的默认实现 

     

    能在⼀一定程度上简化程序代码,并且增强实例变量的访问安全性。 

    NSString *_name;

    @property NSString *name;

    //相当于下面的两行代码

    //- (void)setName:(NSString *)name;

    //- (NSString *)name;

     

    第⼀一类:读写性控制(readonlyreadwritesettergetter)

    readonly,告诉编译器,只声明getter⽅方法(⽆无setter⽅方法)。
     例如:@property(readonly)NSString *name;

    //等价于 - (NSString *)name;

    readwrite,告诉编译器,既声明setter⼜又声明getter
     例如: @property(readwrite)NSString *name;

    //等价于 - (NSString *)name;

    - (void)setName:(NSString *)name;

    readwrite是读写性控制的默认设置。

    第⼆二类:原⼦子性控制(nonatomicatomic)

    atomicsettergetter⽅方法在多线程访问下是绝对安全的,即 settergetter内部做了多线程访问处理。原⼦子性控制的默认设置是 atomic

    nonatomicsettergetter⽅方法内部不会做多线程访问处理,仅仅是 普通的settergetter⽅方法

    程序开发过程中,settergetter处处都在⽤用,如果使⽤用atomic,需要不断 的对settergetter加锁解锁以保证线程访问安全,会很占⽤用系统资源,降低

    系统性能。 通常设置为nonatomic,某些属性需要线程安全的时候,才定义为atomic

    例如:@property (readwrite,nonatomic)NSString *name;
     //等价于

    - (NSString *)name;

    - (void)setName:(NSString *)name;

    第三类:语义设置(assignretaincopy)

    assignsettergetter内部实现是直接赋值。

    例如:@property(nonatomic,assign)NSString *name;
     - (void)setName:(NSString *)name{

    _name = name;
     }

    - (NSString *)name{
     return _name;

    }

    retainsettergetter的内部实现会做内存优化。

    例如:@property(nonatomic,retain)NSString *name;

    - (void)setName:(NSString *)name{
     if(_name != name){

    [_name release];

    _name = [name retain];
     }

    }- (NSString *)name{

    return [[_name retain]autorelease];

    } 

     

    copysettergetter的内部实现也会做内存优化。

    例如:@property(nonatomic,copy)NSString *name;

    - (void)setName:(NSString *)name{
     if(_name != name){

    [_name release];

    _name = [name copy];
     }

    }

     

    - (NSString *)name{

    return [[_name retain]autorelease];
     

     

     

    如果属性是⾮非对象类型(⽐比如int,float等)属性的语义设置使⽤用

    assign。 如果属性是对象类型(⽐比如NSStrngNSArray等)属性的语义设

    置使⽤用retain。 如果属性是对象类型并且想得到参数的copy,使⽤用copy关键字。 

     

     

    KVC

        Student *stu = [[Student alloc] init];

        [stu setValue:@"anhao" forKey:@"_name" ];

     

        NSLog(@"%@",stu.name);

     

     

    ---恢复内容结束---

    On the road。。。
  • 相关阅读:
    js 树型数据 转 数组
    js 数组转树型结构数据
    计算 手机端页面高度和宽度
    解密优酷智能生产技术,看 AI 赋能内容数字化
    从 FFmpeg 性能加速到端云一体媒体系统优化
    导播上云,把 “虚拟演播厅” 搬到奥运村
    揭秘阿里云 RTS SDK 是如何实现直播降低延迟和卡顿
    迈入 8K 时代,AI 驱动超高清 “视” 界到来
    千亿级市场赛道,阿里云视频云拿下 “三连冠”
    50 亿观众的 “云上奥运”,顶级媒体背后的数智化力量
  • 原文地址:https://www.cnblogs.com/ianhao/p/4424007.html
Copyright © 2011-2022 走看看