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

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

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

6693 次点击
所在节点    iDev
47 条回复
loveuqian
2015-04-23 09:25:21 +08:00
国内都教OC了?
lisonfan
2015-04-23 09:25:55 +08:00
@loveuqian 专科
lisonfan
2015-04-23 09:27:29 +08:00
@loveuqian 拿虚拟机教……我一直在怀疑这老师的水平……
anerevol
2015-04-23 09:37:43 +08:00
一直用arc 看到release好不习惯。
retain的release没问题啊。
更好的做法是 self.name = nil吧
huoshanhui
2015-04-23 09:39:41 +08:00
@lisonfan 没写错。还在交 MRC 啊。
df4VW
2015-04-23 09:39:41 +08:00
虚拟机。。机智
LINAICAI
2015-04-23 09:42:18 +08:00
...你到底吐槽嘛?没看懂
lisonfan
2015-04-23 09:46:37 +08:00
@huoshanhui NSString的成员变量也需要释放?不是NSObject对象才需要释放吗?
lion9527
2015-04-23 09:47:12 +08:00
错是没错,不过OC2.0这种写法太啰嗦了。
还有这个年代了应该直接从ARC开始。
lion9527
2015-04-23 09:48:55 +08:00
@lisonfan 有retain的就需要release。OC基础教程里有说
Vimiumist
2015-04-23 09:54:03 +08:00
@lisonfan 而且NSString也是NSObject
lisonfan
2015-04-23 09:57:58 +08:00
@Vimiumist
@lion9527
那property nsstring 传copy 还是 retain?
chchwy
2015-04-23 10:01:19 +08:00
chchwy
2015-04-23 10:02:07 +08:00
Vimiumist
2015-04-23 10:02:49 +08:00
@lisonfan 如果我没有理解错你的问题的话,传copy还是retain取决于你声明property的时候是copy还是retain
lisonfan
2015-04-23 10:04:53 +08:00
@Vimiumist
@lion9527
我把Person实例化,然后把实例化对象release,Person里的成员变量不都被release了吗?
sangmong
2015-04-23 10:05:28 +08:00
@loveuqian 国内各种培训iOS的,遍地都是
lee0100317
2015-04-23 10:14:17 +08:00
@lisonfan 你说的逻辑在mrc里面必须显示的在dealloc里面release 成员变量才会出现。
Vimiumist
2015-04-23 10:22:38 +08:00
@lisonfan 从你问的问题来看我感觉你太多基础的东西还不了解,建议你找本书看看,做做练习题,否则知道了这个问题的答案你也未必能理解原因
wangccddaa
2015-04-23 10:41:45 +08:00
@lisonfan
1 OC 都应该从基础学起,release 和 retain 是最基本的内存管理方法,尽管现在有了ARC ,但是还是要虚心的学习啊,不明白底层的东西,注定走不了多远。
2 NSString 继承自 NSObject 所以NSString 类型的变量还是需要释放的。
3 把Person实例化,这个是在内存中分配一块地址,NSString *string 也会分配一块地址,可以打印下他们的地址出来比较下。你释放的只是person 这个对象的内存地址,这个时候string 是什么情况呢?内存地址也一块被释放了么?可是他们俩是不同的地址啊,这个时候可以在delloc函数 里打印下 string 的retainCount 看下,你要理解 delloc 函数的作用。
4 MRC 的原理只是系统自动在合适的位置加上的 retain 和 release 代码而已。

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

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

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

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

© 2021 V2EX