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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

@property (retain) NNString *name
NNString *s = "jack";
stu.name = s;
不是没有用alloc吗?第一行用retain不就用到release了吗?
虽然它是NNString类型的对象,MJ老师不是说它会自动回收的吗?
我晕了,请大家指教。谢谢。

5 个回复

倒序浏览
NSSting是一个autorelease的对象吗?

点评

我也受教了。盆友仔细看看视频吧。  发表于 2014-12-25 18:18
不是  发表于 2014-12-25 12:59
回复 使用道具 举报
NSString *s = "jack";这种常量字符串比较特殊,内存分布不同,类似于C的char *str = "jack";。
[s retainCount]是一个很大的数,而不是1。
相应的_name = [s retain];也并不会让s引用技术+1,而是依旧保持一个很大的数。
两个字符串指向同一常量字符串。

NSString *str = @"jack";
NSString *s = [NSString stringWithFormat:@"%@", str];
这样的s引用计数才是1,而且和常量字符串str是完全不同的内存地址。

点评

受教,看atuorelease的时候,MJ老师又详细讲了,初始化的方法如果通过alloc方式,就需要用release,如果直接赋值就不用。  发表于 2014-12-25 16:27
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马