0

我有一个

@property(retain) NSString* test;

它在实现文件中综合。

在dealloc中,这两个都是正确的还是不正确的?

self.test = nil;

self.test = @"";

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

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

提前致谢。

4

2 回答 2

5

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

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

于 2012-11-01T06:49:49.447 回答
2

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

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

于 2012-11-01T07:14:27.980 回答