美文网首页
IOS 修饰符 详解

IOS 修饰符 详解

作者: 青宜结鬼章 | 来源:发表于2018-09-11 14:09 被阅读0次

    一、readOnly,readWrite

    readeonly, “只读”只生成getter方法 而没有生成setter方法 这时候如果调用setter方法会 报一个Assignment to readonly property的错误  但是这里可以使用keyValue(kvc)的方法修改

    代码如下

    @interfaceMyFirstClass:NSObject

    @property(nonatomic,copy,readonly)NSString* string;

    @end

    #import"MyFirstClass.h"

    @implementationMyFirstClass

    - (instancetype) init{

    self= [superinit];

    if(self) {

    _string =@"我会被改变吗";

    }

    returnself;

    }

    @end

    - (void)viewDidLoad {

    [superviewDidLoad];

    MyFirstClass *class= [MyFirstClass new];

    NSLog(@"string === %@",class.string);

    [classsetValue:@"改变了"forKey:NSStringFromSelector(@selector(string))];

    NSLog(@"string === %@",class.string);

    }

    Log如下:

    2018-03-1611:08:58.932303+0800PropertyDesc[5681:445705] string === 我会被改变吗

    2018-03-1611:08:58.932454+0800PropertyDesc[5681:445705] string === 改变了

    readWrite

    读写属性 生成setter方法和getter方法   

    二、atomic nonatomic

    atomic

    默认属性修饰词 按照官方文档说 即使是从不同线程去setter或者getter都能完全的获取到或者设置值,从这里也可以看出 它并不是线程安全的  因为如果a线程在getter值 但是b、c线程在setter 这时agetter到的值可能是b、c线程setter之后的值 也可能是setter之前的值 

    nonatomic

    并没有做锁的操作 多线程同时进行setter/getter操作,并不能保证得到一个完整的value,所以相对atomic来说nonatomic修饰的属性访问速度更快,而且平时对线程安全我们更倾向于使用信号量、NSLock和synchronized去控制线程安全,他们都能保证代码块的原子性,所以几乎所有的属性都用nonatomic去修饰。

    三、

    相关文章

      网友评论

          本文标题:IOS 修饰符 详解

          本文链接:https://www.haomeiwen.com/subject/djosgftx.html