iOS @Property的一些常用属性说明

        为了代码的可读性和内存的正常管理,则需要对一些对象的声明遵循一定的原则,而不是乱用@property的属性。笔者是自学的编程学,曾在参数的选择上纠结不少次,只晓得用而不明其意,就像一个不可变数组NSArray,相信大家都用过是用strong去修饰,而我在一些项目总看到好多都是用copy修饰,而且一个大牛也建议我用copy修饰。接下来就带大家捋一捋各参数的含义与用法。

@propert与@synthesize;

nonatomic与atomic;

readonly与readwrite;

strong与weak;

copy、retain与assign;


1、setter与getter方法

1)、在头文件(.h)中

int count;

//setter -- 手动设置获取实例变量的方法

- (void)setCount:(int)newCount;

//getter -- 手动设置设置实例变量的方法

- (int)count;

2)、在实现文件(.m)中

- (void)setCount:(int)newCount{

            count = newCount;

}

- (int)count{

        return count;

}

2、@propert与@synthesize

1)、@property

@property是声明属性的语法,它可以快速的为实例变量创建存取器,并且允许通过点语法使用存取器。

存取器:用于获取和设置实例变量的方法。getter是用于获取实例变量的存取器,setter是用于设置实例变量的存取器。

通常使用@property声明属性时,setter与getter方法的声明与实现都可以省略。

2)、@synthesize

@synthesize同样是声明属性的语法,它不同@property的是在.m文件实现。在.h文件中声明完property属性之后,会自动生成下划线,如_age、_name;如果不想要下划线,那么就可以使用@synthesize去修饰,例如,在.m中写@synthesize age;那么_age就会变成age。

3、nonatomic与atomic

1)、atomic

atomic是原子操作,提供线程安全,声明属性系统默认是atomic的,运行时比较耗费系统资源。

2)、nonatomic

nonatomic是非原子性操作,不提供线程安全,但在运行时相比atomic效率更高。

3)、两者之间的区别

        atomic和nonatomic的区别在于,系统自动生成的getter/setter方法不一样。如果你自己写getter/setter,那atomic/nonatomic/retain/assign/copy等这些关键字只起提示作用,写不写都一样。

       对于atomic的属性,系统生成的getter/setter会保证get、set操作的完整性,不受其他线程影响。比如,线程 A 的getter方法运行到一半,线程 B 调用了setter,那么线程 A 的getter还是能得到一个完好无损的对象。而nonatomic就没有这个保证了。所以,nonatomic的速度要比atomic快。不过atomic可并不能保证线程安全。如果线程 A 调了 getter,与此同时线程 B 、线程 C 都调了setter——那最后线程 A get 到的值,3种都有可能:可能是 B、C set 之前原始的值,也可能是 B set 的值,也可能是 C set 的值。同时,最终这个属性的值,可能是 B set 的值,也有可能是 C set 的值。

4、readonly与readwrite

1)、readonly

设置的属性只可读不能写(即在该类中某一属性已经设置好了固定的值,当调用该类使用这一属性时不能再次设值)。

2)、readwrite

设置的属性可以读写,系统默认的属性。

5、strong与weak

1)、strong

        strong声明的属性在赋值时调用被指向对象的retain方法,使其引用计数加1。在OC中一般对象的声明是使用strong,但有时项目的需要,为了避免内存泄漏和BUG的影响而使用copy、assign和weak去声明。

2)、weak

        weak相对于strong来说不增加对象的引用计数,也不持有对象,对象消失后,指针自动变成nil。

3)、strong与weak的区别

从1)和2)中可以看出部分的区别,接下来我继续带大家讨论下:

首先声明两个属性view1和view2,view1用strong声明,而view2用weak声明;

再在程序中alloc一个view3和view4;

然后view1指向view3,view2指向view4;

最后使view3、view4同时置nil,打印view1和view2的值。

通过运行可以发现view1仍然分配了内存地址,而view2=null。

6、copy、retain与assign

1)、copy

        setter方法进⾏行Copy操作,表示重新建立一个引用计数为1的对象,然后释放旧的值,通常用于NSString和block

2)assign

       是默认属性,只可以对基本数据类型(如CGFloat,NSInteger,Bool,int,代理对象)等使⽤。  该方式会使对象直接赋值而不会进行retain操作。

3)、retain

        表示对对象和及其⼦子类对象release旧值,再retain新值,使对象的应⽤计数增加⼀。  该属性只能使⽤用于obejective-c类型对象,不能用于Core Foundation对象。

4)、综述

retain是指针拷贝;

copy是内容拷贝,在拷贝之前,都会释放旧的对象。

assign:简单赋值,不更改索引计数(Reference Counting)。

7、读者V587

如果有不妥之处请大家指出,谢谢。





最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 很多人讲属性修饰词的时候,喜欢从字面或者定义的角度介绍它们间的区别。这篇文章,我们侧重从修饰词对setter方法的...
    小码僧阅读 3,407评论 1 18
  • 2014.4.6 清明返故乡 禾苗青青艾草芬芳, 白花朵朵处处幽香。 雨水滴滴洒落宁江, 脚步怱怱魂牵故乡。
    文明MM阅读 335评论 1 1
  • 许多时候,自己可能以为许多看过的书籍都成过眼烟云,不复记忆,其实他们仍是潜在的。在气质里,在谈吐上,在胸襟的无涯。...
    我是二白阅读 356评论 0 0
  • 在外地,只要你遇到一个看上去还算体面的涞源人,他十有八九曾经是一中人。一中之于涞源,相当清华北大之于全国,...
    龙莹洁阅读 165评论 0 0
  • 我开封了很久没有启用的塔罗牌。 死神牌灵给的结果还是这么直接,一如星星给的那么温柔和充满希望。我拿到了倒吊男。 如...
    米粒粒1阅读 240评论 0 1