OC——52个有效方法:6.理解“属性”概念

使用OC等面向对象语言编程时,“对象(object)”就是“基本结构单元(building block)”。开发者可以通过对象来存储传递数据。对象之间传递数据并执行任务的过程就是“消息传递(Messaging)”。当程序运行起来之后,为其提供相关支持的代码叫做“运行期环境(runtime)”。它提供了一些使得对象之间能够传递信息的重要函数,并包含创建类实例所用的所有逻辑。

属性

属性是OC的特有属性,用于封装对象中的数据。实例变量通过“存取方法(access method)”来访问。获取方法(getter)读取变量值,设置方法(setter)写入变量值。

  • 使用 @property 来修饰变量,系统自动合成getter和setter方法。
  • 使用 @synthesize 来指定实例变量的名字,重新更换名字
  • 使用 @dynameic 定义变量,不用自动创建属性所用的实例变量,也不要创建存取方法

属性的特质

特质(attribute)

  • 1.原子性

默认由编译器合成的方法会通过锁定机制确保其原子性(atomicity),如果属性具备nonatomic特质,则不使用同步锁。如果一个属性不具备nonatomic特质,那她就是原子的(atomic)。

  • 2.读写权限
  • 具备读写(readwrite)特质的属性拥有getter和setter方法。如果属性由@synthesizer来实现,编译器会自动生成这个连个方法。

  • 具备只读(readonly)特质的属性仅仅有getter方法。只有该属性被@ synthesizer来实现时候,才具备setter方法。

  • 3.内存管理语义

属性用户封装数据,而数据有自己的所有权语义。

  • assgin 执行对纯量类型简单赋值操作,例如:CGFloat、NSInteger

  • strong 给属性定义了一种拥有关系(owning relationship)。为该属性设置新值时,会先保留新值,并释放旧值,在把新值赋值上去。

  • weak 给属性定义一种非拥有关系(nonowning relationship)。为该属性设置新值时,既不保留新值,也不释放旧值。当属性被销毁时,属性值会清空。

  • copy 不保存新值,将其拷贝。如果被别人修改,可以有备份文件。

  • unsafe_unretained 非拥有关系,当对象被销毁时候,属性值不会被自动清空。

  • 4.方法名
  • getter=<name> 指定getter方法名。比如给BOOL加getter=isON

  • setter=<name> 指定setter方法名,一般不常用。
    尽量使用不可变对象。

atomic和nonatomic区别

具备atomic特质的获取方法会通过锁定机制来确保其操作的原子性。例如:两个线程读写同一个属性,无论何时都能看到有效的属性值。如果不加锁,当一个线程改变了属性值,另外一个也恰好在更改,就会造成属性读取不一致,导致后续的问题。
看到的属性几乎都是非原子性的原因:

  • 在iOS开发中使用同步锁开销大,引发性能问题
  • 不能保证线程安全(thread safty)

总结

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

推荐阅读更多精彩内容