
_name 是 Person里NSString的成员变量
然后他 property NSString 传 retain
他是写错了吧?。。。。
1
loveuqian Apr 23, 2015
国内都教OC了?
|
6
df4VW Apr 23, 2015
虚拟机。。机智
|
7
LINAICAI Apr 23, 2015
...你到底吐槽嘛?没看懂
|
8
lisonfan OP @huoshanhui NSString的成员变量也需要释放?不是NSObject对象才需要释放吗?
|
9
lion9527 Apr 23, 2015
错是没错,不过OC2.0这种写法太啰嗦了。
还有这个年代了应该直接从ARC开始。 |
13
chchwy Apr 23, 2015
|
14
chchwy Apr 23, 2015
https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/index.html
文件一開頭就能看見 NSString 繼承了 NSObject |
16
lisonfan OP |
18
lee0100317 Apr 23, 2015
@lisonfan 你说的逻辑在mrc里面必须显示的在dealloc里面release 成员变量才会出现。
|
20
wangccddaa Apr 23, 2015 @lisonfan
1 OC 都应该从基础学起,release 和 retain 是最基本的内存管理方法,尽管现在有了ARC ,但是还是要虚心的学习啊,不明白底层的东西,注定走不了多远。 2 NSString 继承自 NSObject 所以NSString 类型的变量还是需要释放的。 3 把Person实例化,这个是在内存中分配一块地址,NSString *string 也会分配一块地址,可以打印下他们的地址出来比较下。你释放的只是person 这个对象的内存地址,这个时候string 是什么情况呢?内存地址也一块被释放了么?可是他们俩是不同的地址啊,这个时候可以在delloc函数 里打印下 string 的retainCount 看下,你要理解 delloc 函数的作用。 4 MRC 的原理只是系统自动在合适的位置加上的 retain 和 release 代码而已。 |
21
Elethom Apr 23, 2015
真無語。別上這個課了,去看 CS193P 吧。
|
22
arkilis Apr 23, 2015
一切iOS开发不说明版本都是耍流氓.
|
23
lisonfan OP @wangccddaa 首先感谢您打了这么多字回答我的疑问,我也都看完了,您在第三点最后一段提到的在dealloc打印string的retainCount,我刚刚试了一下,没有在dealloc添加name release,然后直接打印name retainCount ,打印出来的值为-1
|
24
fannheyward Apr 23, 2015 歪个楼:不要通过 retainCount 做内存判断 http://whentouseretaincount.com/
|
25
lisonfan OP |
26
wezzard Apr 23, 2015 Your tutor is right. There is a best practice in MRC and that is what your tutor shown.
|
27
ianisme Apr 23, 2015
我了个大曹 怎么又是人狗。。。
|
29
robertlyc Apr 23, 2015
快 4-5年没见到过这种写法了
|
30
ybh37 Apr 23, 2015
为什么不是 swift
|
32
PG6G92lJb7qCYHRt Apr 23, 2015
enable ARC please...
|
33
finian Apr 23, 2015
|
34
popo233 Apr 23, 2015
看到 tz 菊花一紧 之前接手一个项目里面的变量都是这么命名的..
|
35
ashong Apr 23, 2015
没错
|
37
chisj Apr 23, 2015 看到上面还有说直接=nil的,看来MRC懂的人也不多啊,哈哈。
|
38
sallowdish Apr 24, 2015
看到release下意识看了眼发帖时间,虽然本人也是ARC开始学的
|
39
joshua7v Apr 24, 2015
|
41
krafttuc Apr 24, 2015
ARC的情况下,编译器会自动帮你在 dealloc 里 release 掉instance variables。。。如果是manual reference counting,既然前面retain过了,析构时必然要release啊
最后,这都什么年代了,还在教早几年前的东西。 |
42
krafttuc Apr 24, 2015
补充一下,前面有同学说的 retainCount 方法的返回值是不可信的,并不能每次都真实反映对象的引用数。
|
45
nori Apr 24, 2015
@krafttuc
@lisonfan 首先如果是MRC的话,retainCount是准确的,在autorelease的情况下才不具备参考,一般是最大无符整数换成有符就是-1了,当然也有随机数的情况版本问题别太纠结。 说明下为什么是-1,主要是因为初始化Person的时候,你传进去的是`@"jack"`,这是什么,就涉及到编译器和内存堆栈的知识,不想长篇大论。明确地说,这其实是个`常量`,编译之后是会直接存储在可执行程序里的,而常量都是由系统来管理其生命周期的(autorelease),因此其retainCount才没有什么参考价值。 不过话又说回来,大部分程序员认为,了解MRC很重要。我不这样认为,我个人决定现在学习确实作用不大,已经到了可以直接ARC的年代,完全没必要为了学习而学习,只要明白其原理即可。 话说当年MRC的时候确实,比现在要多些一倍有余的代码,当然如果觉得多码几行能提高成就感那就另当别论了。 |
46
xi_lin Apr 29, 2015
MRC年代写一句alloc就接一个release在后面
还是ARC好 |
47
kobe1941 May 3, 2015
release没问题,不过都这个时候了应该直接ARC了吧。
你贴的代码,几个文件就有两种代码风格,我也是醉了 retainCount打印的值不准确,你们老师没教你么? |