请解释我下面的代码行,我只是困惑..,
Nsstring *a;
Nsstring *b;
a = [b retain];
a & b 的保留计数是多少。
a = [b copy];
a & b 的保留计数是多少。
提前致谢。
请解释我下面的代码行,我只是困惑..,
Nsstring *a;
Nsstring *b;
a = [b retain];
a & b 的保留计数是多少。
a = [b copy];
a & b 的保留计数是多少。
提前致谢。
从技术上讲,您发布的情况下的保留计数是不确定的,因为您从未初始化变量。调用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 的内存管理指南。此外,除非您有充分的理由不这样做,否则您应该使用ARC,它可以让您摆脱手动管理内存的大部分麻烦。
在另一个答案的评论中,您询问如何确定对象的保留计数。你总是自己跟踪它。其他对象可能会保留和释放您的字符串,但您不在乎。如果您使用创建和对象alloc
,调用retain
对象或copy
对象,则您有责任在完成该对象后释放或自动释放该对象。否则不是你的责任。对象的绝对保留计数无关紧要。
NSString
没有有意义的保留计数。但是,如果您将其用作一般示例,则查找具有正常保留计数的对象的保留计数的方法是:
[a retainCount]