请解释下面的代码行,我只是困惑..,
Nsstring *a;
Nsstring *b;
a = [b retain];
&的保留计数是多少?湾
a = [b copy];
&的保留计数是多少?湾
提前致谢。
答案 0 :(得分:3)
从技术上讲,您发布的情况中的保留计数是不确定的,因为您从不初始化变量。在未初始化的指针上调用retain
可能会崩溃。
其次,您的情况中的保留计数取决于您如何初始化变量。
NSString *a;
NSString *b = @"test";
a = [b retain];
/* Both variables reference the same object which has been retained.
Retain count +1
*/
NSString *a;
NSString *b = @"test 2";
a = [b copy];
/* `a` has a retain count +1 (a variable returned from a `copy`
method has a retain count +1). `b` retain count does not change
(you haven't called `retain` on `b`, so it's count remains the
same.
*/
如果您还没有这样做,请阅读Apple's memory management guidelines。此外,除非你有充分的理由不这样做,否则你应该使用ARC,这可以解除大部分令人头疼的问题,无法手动管理内存。
在对另一个答案的评论中,您询问如何确定对象的保留计数。你总是自己跟踪它。其他对象可能会保留和释放您的字符串,但您不在乎。如果使用alloc
创建和对象,在对象上调用retain
或在对象上调用copy
,则在完成对象时,您负责释放或自动释放该对象。否则,这不是你的责任。对象的绝对保留计数永远不重要。
答案 1 :(得分:-3)
NSString
没有有意义的保留计数。但是,如果您使用的是一般示例,那么查找具有正常保留计数的对象的保留计数的方法是:
[a retainCount]