常用的知识点总结-属性修饰符

属性修饰符

访问权限

  • readonly 只读权限
  • readwrite 可读可写权限

线程安全

  • atomic 原子性 注:atomic所说的线程安全只是保证了getter和setter存取方法的线程安全,并不能保证整个对象是线程安全的
@property (atomic,strong) NSString *testa;//正确
@property (noatomic,strong) NSString *testa;//错误
//atomic 保证setter getter 安全
dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
        for (NSInteger i = 0; i<10000000; i++) {
            dispatch_async(queue, ^{
                @autoreleasepool {
                    self.testa = [NSString stringWithFormat:@"testssss%zd",i];
                    NSLog(@"%@",self.testa);
                }
            });
        }
    });
//但保证不了对self.testa 进行其他操作的安全性
dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
        for (NSInteger i = 0; i<10000000; i++) {
            dispatch_async(queue, ^{
                if (i%2==0) {
                    self.testa =  @"aaaaaaaaaaaa";
                } else {
                    self.testa =  @"aaaaa";
                }
            });
        }
    });
    dispatch_async(queue, ^{
        NSString *str = [self.testa substringWithRange:NSMakeRange(0, 7)];
    });
  • nonatomic 非原子性 读写速度比atomic快,原因是不涉及线程安全的判断以及对应的操作

指定方法名称

  • getter=method 指定get方法名
  • setter=method 指定set方法名

内存管理

  • retain 一般是在MRC下用来修饰对象,修饰对象为强引用,使其引用计数+1,保证对象不被销毁,只要还有一个变量指向对象.对象就会保持在内存中.当指针指向新值,或者指针不再存在时,相关联的对象就会自动释放.
  • assign 一般用来修饰基本数据类型,修饰对象为弱引用,而且不会将已经释放的指针值nil,容易引起野指针问题,在 set 方法中 ARC 系统不会调用 引用计数器相关的代码执行, 只是简单的赋值而已,计数器不会改变.其为非OC对象.
  • strong 和retain 但是,是在ARC下修饰对象的.在 set 方法中 ARC 系统会自动帮我们加入对 新值 retain 使其引用计数器 + 1 的代码,并且对旧 值进行 release 使其引用计数器 - 1 的代码.
  • weak 同样是出现在ARC下修饰对象的,修饰对象为弱引用,在 set 方法中 ARC 系统不会调用 引用计数器相关的 代码执行,只是简单的赋值而已,所以其引用计数器不会改变.其为OC对象。用weak修饰对象时安全的,因为用weak修饰过的对象,在对象被释放时,会将指向对象的指针置nil,避免了野指针的问题.
    补充: weak置nil 是怎么实现的?
    weak属性的特点:
    weak 表明该属性定义了一种“非拥有关系” (nonowning relationship)。
    为weak属性设置新值时,设置方法既不保留新值,也不释放旧值。
    同assign类似,然而在属性所指的对象释放时候,属性值也会清空(nil out)。
    runtime是如何实现 weak 变量的自动置nil?
    weak 对象会放入一个 hash 表中。
    用 weak 指向的对象内存地址作为 key,当此对象的引用计数为0的时候会 dealloc。
    假如 weak 指向的对象内存地址是addr,那么就会以addr为键, 在这个 weak 表中搜索,找到所有以addr为键的 weak 对象,从而设置为 nil。
    具体机制:
    objc_storeWeak(&weakPo, Model)函数:
    objc_storeWeak函数把赋值对象(Model)的内存地址作为键值key,将weak修饰的属性变量(weakPo)的内存地址(& weakPo)作为value,注册到 weak 表中。
    如果Model为0(nil),那么把变量(weakPo)的内存地址(& weakPo)从weak表中删除,
    可以把objc_storeWeak(&weakPo, Model)理解为:objc_storeWeak(value, key),并且当key变nil,将value置nil。
    在Model非nil时,weakPo和Model指向同一个内存地址,在Model变nil时,weakPo变nil。此时向weakPo发送消息不会崩溃:在Objective-C中向nil发送消息是安全的。
  • copy 拷贝了一份相同的内容,在 set 方法中 ARC 系统会自动帮我们加入对 新值 copy 的代码。引用计数器不变.
    未完待续...
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352