在objective-c中,用NSNnumber中用initwithInt创建一个对象后,引用计数器为1,而用initwithDouble
1个回答
展开全部
NSNnumber的引用计数对不了解其底层实现的人来说是很怪异的
先纠正一下 通常情况下我们使用NSNumber都是通过 [NSNumbernumberWithInt:1] 建立自动释放的对象
在官方的解释中,retainCount对于某些特殊情况下的对象并不可靠
而NSNumber一般创建的是自动释放的对象,自动释放的对象的retainCount也是不可靠的
所以你使用init之后,记得release即可,不用关心它的retaincount
先纠正一下 通常情况下我们使用NSNumber都是通过 [NSNumbernumberWithInt:1] 建立自动释放的对象
在官方的解释中,retainCount对于某些特殊情况下的对象并不可靠
而NSNumber一般创建的是自动释放的对象,自动释放的对象的retainCount也是不可靠的
所以你使用init之后,记得release即可,不用关心它的retaincount
追问
在NSString中也会出现这个情况,也是这个意思呗?
追答
是的 NSString的字符串会存在静态存储区 静态存储区不是由我们手动释放 ,不用我们管理
比如你写了个NSString *str = @"nsstring";
静态区即会存在一个"nsstring"的字符串常量,而str只是指针指向这个常量的地址
如果你在别的地方又生成一个"nsstring"的字符串 同样是指向静态区的这个常量
像你说的如果用init、initwithxxxx方法,是将静态区的这个变量复制了一份到堆中。
NSNnumber和NSString建议都使用便利构造器生成,在达到一定层次以后可以再讨论关注底层,因为不开源的苹果底层我们的手段只有推理和猜测。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询