黑马程序员技术交流社区

标题: 关于类成员变量的施放,有一点小问题,希望大家解答。 [打印本页]

作者: talent123    时间: 2015-5-30 10:04
标题: 关于类成员变量的施放,有一点小问题,希望大家解答。
本帖最后由 talent123 于 2015-5-30 10:05 编辑
  1. @interface Book : NSObject
  2. {
  3.         NSString *_name;
  4. }
  5. - (void)setName:(NSString *)name;
  6. - (NSString *)name;
  7. @end
  8. @implementation Book
  9. - (void)setName:(NSString *)name
  10. {
  11.         _name = name;        
  12. }
  13. - (NSString *)name
  14. {
  15.         return _name;
  16. }
  17. - (void)dealloc
  18. {
  19.         [super dealloc];
  20.         NSLog(@"Book - release");
  21. }
  22. @end
复制代码
在定义一个书对象的时候,成员变量_name 也需要释放吗?字符串类型的对象不用吧 ?有点模糊了。谢谢各位解答下。
搜索
复制

搜索
复制



作者: 小龙女的萝卜    时间: 2015-5-30 10:15
系统自带的方法里没有包含alloc、new、copy,说明返回的对象是@autorelease的,会自动释放。NSString是系统自带的,液没有以上的三个词,所以不用。对于成员变量_name ,我是这样理解的,它不是对象,既然就不用释放。
作者: talent123    时间: 2015-5-30 10:18
小龙女的萝卜 发表于 2015-5-30 10:15
系统自带的方法里没有包含alloc、new、copy,说明返回的对象是@autorelease的,会自动释放。NSString是系统 ...

我也是这么理解的
虽然字符串是类,也有方法,但是使用中并不需要@interface创建,一直以来都觉得不需要施放。
结果!
今天翻到笔记 看到一个
[_name release];
直接震惊了
我再查找一下视频 老师是怎么讲解的
作者: 小龙女的萝卜    时间: 2015-5-30 10:20
talent123 发表于 2015-5-30 10:18
我也是这么理解的
虽然字符串是类,也有方法,但是使用中并不需要@interface创建,一直以来都觉得不需要 ...

真的有这个[_name release]吗?靠,你赶紧看看给我讲讲

作者: talent123    时间: 2015-5-30 10:26
小龙女的萝卜 发表于 2015-5-30 10:20
真的有这个[_name release]吗?靠,你赶紧看看给我讲讲

找到了
在set方法的内存管理强化练习
第12号视频
天啊!确实有[_name release]
是没有用autorelease的情况下。
作者: talent123    时间: 2015-5-30 10:39
小龙女的萝卜 发表于 2015-5-30 10:20
真的有这个[_name release]吗?靠,你赶紧看看给我讲讲

[_name release]是存在于 - (void)dealloc; 方法里
如果创建的时候使用这样方式:
NSString *s = @"JACK";
就不需要release ,只有在使用alloc的时候才需要release .
没有alloc 就绝不能使用release.

作者: 张晓珊    时间: 2015-5-30 11:03
小龙女的萝卜 发表于 2015-5-30 10:15
系统自带的方法里没有包含alloc、new、copy,说明返回的对象是@autorelease的,会自动释放。NSString是系统 ...

_name 是 NSString类型的,也是对象,肯定需要释放。
作者: 张晓珊    时间: 2015-5-30 11:06
talent123 发表于 2015-5-30 10:39
[_name release]是存在于 - (void)dealloc; 方法里
如果创建的时候使用这样方式:
NSString *s = @"JACK" ...

NSString 是系统封装了alloc?就是快速创建对象方法,例如+ (void)NSString { return [[NSString alloc] init] },所以需要release.
作者: talent123    时间: 2015-5-30 11:20
张晓珊 发表于 2015-5-30 11:06
NSString 是系统封装了alloc?就是快速创建对象方法,例如+ (void)NSString { return [[NSString alloc]  ...

NSString 是默认 autorelease的
在main函数里不用release
那么在dealloc里面要不要[_name release]?
回头看了看视频,老师好像没有讲这段。

作者: 小龙女的萝卜    时间: 2015-5-30 12:04
张晓珊 发表于 2015-5-30 11:03
_name 是 NSString类型的,也是对象,肯定需要释放。

NSString类型的,在创建是没有出现那三个词,是不是会自动释放啊?





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2