MacDev 板


LINE

※ 引述《leondemon (狗狗)》之铭言: : 推 leondemon:不过蛮好奇的 会使用setA:nil来relase的特殊情况有哪些 12/27 00:46 : → leondemon:如果有实际例子能够提供的话 小弟感激不尽 12/27 00:46 : → zonble:GC 12/27 11:22 : 感谢zonble大有稍微解了我一点疑惑 : 所以意思是指 使用setA:nil来release旧物件 并且不让指标指向旧物件 : 好让GC可以找出已经没在用的memory leak物件来释放记忆体吗? 在开启 Garbage Collection 之後,retain 跟 release 都不会起 作用,而是只要是没有任何一个变数 reference 到这块记忆体位置 ,都会自动释放。所以你原本这样写: [anObj release]; 直接改成 anObjc = nil; 就好了 : 但是 我是在书上看到作者在- (void)didReceiveMemoryWarning下面 : 对没有在使用的物件使用setA:nil的方式来release : 可是这是在iPhone上实作这个方法来release不要的物件 : iPhone上又没有GC 那使用setA:nil来release还会有其他先前没有提到的好处吗? 直接用程式码来想,setA: 是什麽? 1. 如果是 synthesize -(void)setA:(id)newA { if (a != newA) { [a release]; a = [newA retain]; } } 如果 newA 是 nil,得到的结果是 [a release]; a = nil; 换句话说,就是不只是释放 a 指向的记忆体位置,同时把 a 指向 nil,因为如果你不把 a 指向 nil,a 就还是会指向一个没有东西 的记忆体,这样下次你对 a send message 的话,就会爆炸。 例如: NSMutableString *a = [[NSMutableString alloc] init]; [a release]; [a length]; // 这样会爆炸 而应该改成 NSMutableString *a = [[NSMutableString alloc] init]; [a release]; a = nil; [a length]; 直接呼叫 setA: 等於是把两行程式变成一行写完。 2. 如果这个 property 不是 synthesize,而是宣告成 dynamic 那麽,setA 就不见得会对应到 a 这个成员变数,可能是其他名称 ,也可能是这个 getter 会影响到其他的变数,可能是这样(先随 便乱写) -(void)setA:(id)newA { if (_a != newA) { [_a release]; [super setB:a]; [c release]; _a = [newA retain]; } } 如果你不用 setA 的话,很可能有一堆东西没有处理到。 另外,虽然现在 iPhone SDK 没有 GC,不代表以後就没有就是了…。 话说其实看官方文件最快 http://ppt.cc/W0vC --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.42.199.13 ※ 编辑: zonble 来自: 114.42.199.13 (12/28 05:58) ※ 编辑: zonble 来自: 114.42.199.13 (12/28 06:56)
1F:推 leondemon:感谢Z大师长篇解说!!! 12/28 19:30
2F:推 leondemon:所以Z大师认为用setA:nil来取代A release比较好吗? 01/01 17:42







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灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP