在objective-c中,用NSNnumber中用initwithInt创建一个对象后,引用计数器为1,而用initwithDouble

创建后引用计数器为2,而直接用alloc和init创建后,计数器为0,这是为什么?急急急... 创建后引用计数器为2,而直接用alloc和init创建后,计数器为0,这是为什么?急急急 展开
 我来答
斤斤宝贝0dE
2012-08-23 · TA获得超过2168个赞
知道小有建树答主
回答量:712
采纳率:0%
帮助的人:971万
展开全部
NSNnumber的引用计数对不了解其底层实现的人来说是很怪异的

先纠正一下 通常情况下我们使用NSNumber都是通过 [NSNumbernumberWithInt:1] 建立自动释放的对象
在官方的解释中,retainCount对于某些特殊情况下的对象并不可靠
而NSNumber一般创建的是自动释放的对象,自动释放的对象的retainCount也是不可靠的
所以你使用init之后,记得release即可,不用关心它的retaincount
追问
在NSString中也会出现这个情况,也是这个意思呗?
追答
是的 NSString的字符串会存在静态存储区 静态存储区不是由我们手动释放 ,不用我们管理
比如你写了个NSString *str = @"nsstring";
静态区即会存在一个"nsstring"的字符串常量,而str只是指针指向这个常量的地址

如果你在别的地方又生成一个"nsstring"的字符串 同样是指向静态区的这个常量
像你说的如果用init、initwithxxxx方法,是将静态区的这个变量复制了一份到堆中。
NSNnumber和NSString建议都使用便利构造器生成,在达到一定层次以后可以再讨论关注底层,因为不开源的苹果底层我们的手段只有推理和猜测。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式