我们老师教 OC,今天说内存管理,他把 NSString 的成员变量在 dealloc 里释放了

2015-04-23 09:16:19 +08:00
 lisonfan

_name 是 Person里NSString的成员变量
然后他 property NSString 传 retain
他是写错了吧?。。。。

6890 次点击
所在节点    iDev
47 条回复
krafttuc
2015-04-24 12:18:27 +08:00
ARC的情况下,编译器会自动帮你在 dealloc 里 release 掉instance variables。。。如果是manual reference counting,既然前面retain过了,析构时必然要release啊

最后,这都什么年代了,还在教早几年前的东西。
krafttuc
2015-04-24 12:22:58 +08:00
补充一下,前面有同学说的 retainCount 方法的返回值是不可信的,并不能每次都真实反映对象的引用数。
lisonfan
2015-04-24 12:39:20 +08:00
@krafttuc 这老师以前是教Java的,而且我们学校我这一届是第一届苹果开发专业的...我估计这老师也是寒假的时候自己学的OC
lisonfan
2015-04-24 12:46:30 +08:00
@krafttuc 我们老师的教学环境是 OS 10.8.5 X Xcode 5.X
nori
2015-04-24 22:00:33 +08:00
@krafttuc
@lisonfan
首先如果是MRC的话,retainCount是准确的,在autorelease的情况下才不具备参考,一般是最大无符整数换成有符就是-1了,当然也有随机数的情况版本问题别太纠结。
说明下为什么是-1,主要是因为初始化Person的时候,你传进去的是`@"jack"`,这是什么,就涉及到编译器和内存堆栈的知识,不想长篇大论。明确地说,这其实是个`常量`,编译之后是会直接存储在可执行程序里的,而常量都是由系统来管理其生命周期的(autorelease),因此其retainCount才没有什么参考价值。
不过话又说回来,大部分程序员认为,了解MRC很重要。我不这样认为,我个人决定现在学习确实作用不大,已经到了可以直接ARC的年代,完全没必要为了学习而学习,只要明白其原理即可。
话说当年MRC的时候确实,比现在要多些一倍有余的代码,当然如果觉得多码几行能提高成就感那就另当别论了。
xi_lin
2015-04-29 21:18:56 +08:00
MRC年代写一句alloc就接一个release在后面
还是ARC好
kobe1941
2015-05-03 19:04:04 +08:00
release没问题,不过都这个时候了应该直接ARC了吧。
你贴的代码,几个文件就有两种代码风格,我也是醉了

retainCount打印的值不准确,你们老师没教你么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/185640

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX