是@“”和零相同吗?

时间:2012-11-01 06:45:17

标签: objective-c properties nsstring

我有一个

@property(retain) NSString* test;

它在实现文件中合成。

在dealloc中,这些都是正确的吗?

self.test = nil;

self.test = @"";

当我记录了nil和@“”的retainCount时,它分别输出为0和-1。

我只是想知道两者是否产生相同的结果。

提前致谢。

2 个答案:

答案 0 :(得分:5)

首先,永远不要使用retainCount。它会欺骗你。其次,保留计数是无符号的,因此“-1”实际上意味着“可能的最高保留计数”,这意味着保留和释放对该对象不执行任何操作。第三,在nil上调用任何方法都会返回nil / 0。

现在已经清除了:nil和@“”不一样。 nil是指向地址0的指针,表示“无对象”。 @“”是一个完全有效的NSString对象,恰好没有任何字符。

答案 1 :(得分:2)

不,你应该总是将属性设置为nil,因为它释放了内存,而其他方式实际上是在创建一个零字符的字符串。

为了更好地理解,您可以阅读[this]:http://macdevelopertips.com/objective-c/objective-c-memory-management.html