A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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 也需要释放吗?字符串类型的对象不用吧 ?有点模糊了。谢谢各位解答下。
搜索
复制

搜索
复制


9 个回复

正序浏览
张晓珊 发表于 2015-5-30 11:03
_name 是 NSString类型的,也是对象,肯定需要释放。

NSString类型的,在创建是没有出现那三个词,是不是会自动释放啊?
回复 使用道具 举报
张晓珊 发表于 2015-5-30 11:06
NSString 是系统封装了alloc?就是快速创建对象方法,例如+ (void)NSString { return [[NSString alloc]  ...

NSString 是默认 autorelease的
在main函数里不用release
那么在dealloc里面要不要[_name release]?
回头看了看视频,老师好像没有讲这段。
回复 使用道具 举报
talent123 发表于 2015-5-30 10:39
[_name release]是存在于 - (void)dealloc; 方法里
如果创建的时候使用这样方式:
NSString *s = @"JACK" ...

NSString 是系统封装了alloc?就是快速创建对象方法,例如+ (void)NSString { return [[NSString alloc] init] },所以需要release.
回复 使用道具 举报
小龙女的萝卜 发表于 2015-5-30 10:15
系统自带的方法里没有包含alloc、new、copy,说明返回的对象是@autorelease的,会自动释放。NSString是系统 ...

_name 是 NSString类型的,也是对象,肯定需要释放。
回复 使用道具 举报
小龙女的萝卜 发表于 2015-5-30 10:20
真的有这个[_name release]吗?靠,你赶紧看看给我讲讲

[_name release]是存在于 - (void)dealloc; 方法里
如果创建的时候使用这样方式:
NSString *s = @"JACK";
就不需要release ,只有在使用alloc的时候才需要release .
没有alloc 就绝不能使用release.
回复 使用道具 举报
小龙女的萝卜 发表于 2015-5-30 10:20
真的有这个[_name release]吗?靠,你赶紧看看给我讲讲

找到了
在set方法的内存管理强化练习
第12号视频
天啊!确实有[_name release]
是没有用autorelease的情况下。
回复 使用道具 举报
talent123 发表于 2015-5-30 10:18
我也是这么理解的
虽然字符串是类,也有方法,但是使用中并不需要@interface创建,一直以来都觉得不需要 ...

真的有这个[_name release]吗?靠,你赶紧看看给我讲讲
回复 使用道具 举报
小龙女的萝卜 发表于 2015-5-30 10:15
系统自带的方法里没有包含alloc、new、copy,说明返回的对象是@autorelease的,会自动释放。NSString是系统 ...

我也是这么理解的
虽然字符串是类,也有方法,但是使用中并不需要@interface创建,一直以来都觉得不需要施放。
结果!
今天翻到笔记 看到一个
[_name release];
直接震惊了
我再查找一下视频 老师是怎么讲解的
回复 使用道具 举报
系统自带的方法里没有包含alloc、new、copy,说明返回的对象是@autorelease的,会自动释放。NSString是系统自带的,液没有以上的三个词,所以不用。对于成员变量_name ,我是这样理解的,它不是对象,既然就不用释放。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马