MacDev 板


LINE

※ 引述《fightword (呼啦啦~)》之铭言: : 想请教一下比较基本的问题 : @property(strong, nonatomic)NSString* value1; : @property(weak, nonatomic)NSString* value2; : @property NSString* value3; : 请问一下这3种宣告的value1, value2, value3 : 在ARC中有没有比较口语话的解译方式 : 试着去看了一下文件,真觉得完全看不懂 : 先谢谢了 括弧里面是 property 属性设定, 可以用来覆写预设的属性 整个括弧省略(第三个)代表完全使用预设值 本例的 property type 是 Objective-C object 所以这代表 strong, atomic, readwrite C scalar(例如 int, struct 等)的预设是 assign, atomic, readwrite 可用的属性包括:(来源 http://d.pr/JaAK) 01. atomic //default 02. nonatomic 03. strong=retain //default 04. weak=unsafe_unretained 05. retain 06. assign //default 07. unsafe_unretained 08. copy 09. readonly 10. readwrite //default (第四个应该不对, 後面讨论) 其中 atomic 与 nonatomic 是一组, readonly 与 readwrite 是一组 前面两个代表该 property 的 setter/getter 是否为 thread-safe 一般而言如果你没用到 threads(含 GCD 等等)用 nonatomic 会节省一些资源 不过差别没那麽大, 尤其在 OS X 後两者就是存取权限设定, 应该看字面就知道意思了 接下来就是困难的部分 如果你还不知道 Objective-C 的记忆体管理模式, 请先自行了解 这随便找个网友推荐的英文书应该都讲得不错 如果真的不想买, 官方文件在这里(文长注意)http://d.pr/7C0E 好, 假设你已经看完了, 那麽你现在应该懂得基本的 MRR 在使用 ARC 的状态下, 你不需要自己进行记忆体管理 但是你需要稍微提示编译器, 它才能帮你插入合适的记忆体管理机制 从简单的开始 C 纯量不需要记忆体管理, 直接用 = 就好 这种管理方式就是 assign 如果是 pointer, 那麽就可能需要记忆体管理 但也或许不用(或不能)—或许因为对象是 C struct 或 C++ class 或其他原因 那麽这时候你就要明确指示编译器你不想要它帮你管理这个物件 要使用的就是 unsafe_unretained 这会让你的 setter 成为单纯的 pointer assignment 所以其实本质上和 assign 一样(不是 weak!) 接着就是 strong 和 weak 如果你看完上面很长的官方文件, 那麽应该能了解他们的主要差异 就是一个会 retain 对象, 一个不会 而 weak 与 assign/unsafe_unretained 属性之间的差异则是 当前者被 release 时, property 值会自动被 nil-out 用下面的状况为例 MayoralCandidate ---------> Fruit orange 市长候选人实例拥有一个叫 orange 的 property, 指向一个 Fruit 实例 如果 orange 是 weak, 那麽当水果被 dealloc 时, orange 属性会自动变成 nil 但如果它是 assign(或 unsafe_unretained) 那麽水果实例的状态就完全不会影响到市长候选人 这代表市长候选人必须自己判断 orange 属性指向的对象是否有效 另一方面当然 strong 就代表会 retain 对象 当然就不会有上面这些问题, 只会(讲得超轻描淡写XD)造成 retain cycles 而已 最後一个, copy 代表把 setter 获得的东西 copy 一份来用 被 retain 的是该拷贝, 而不是你原本传入的物件本身 这通常用在 NSString 或 NSNumber 之类的状况 你希望设定之後就设定了, 不要因为原本的物件被改变而造成自己改变 例如视窗的标题之类 另外要注意 copy 属性通常只应该被用在符合 NSCopying protocol 的类别 大概就这样, 我有点觉得讲了等於没讲, 你还是得啃文件 找一本好书来看吧, 会事倍功半的 -- 「我最想要的同伴嘛,首先是要笑口常开,其次是我们能永远不会发生误会。 如果这些都能办到的话,嗯,如果他是世界上第一流的桥手,也还不错。」 -- 班尼多‧加罗素,前义大利蓝队成员 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.94.57
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/MacDev/M.1406522389.A.5B6.html
1F:推 howdiun:浅显易懂推 07/28 12:50
Edit: 因为蓝宝坚尼被 dealloc 太哀伤了, 换个例子 ※ 编辑: uranusjr (140.112.94.57), 07/28/2014 13:00:33
2F:推 kyushu:good~ 07/28 13:24
3F:推 fightword:很棒了 我会再看一下 3Q 07/28 13:52
4F:推 Jerrynet:会事倍功半的!!!??? 07/28 16:31
5F:→ uranusjr:写错XDDD 请自行脑内修正 07/28 17:51







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP