【发布时间】:2011-04-25 16:34:45
【问题描述】:
请检查我的代码:
@interface ClassA : NSObject {
ClassB *objB;
}
@property (retain) ClassB *objB;
@end
@implementation ClassA:
@synthesiaze objB;
@end
int Main(int argc, const char *argv[])
{
ClassA *objA = [[ClassA alloc] init];
ClassB *objB = [[ClassB alloc] init];
NSLog(@"%d", (int)[objB retainCount]); // 1
NSLog(@"%d", (int)[[objA objB] retainCount]); // 0
objA.objB = objB;
NSLog(@"%d", (int)[objB retainCount]); // 2
/* --> */ NSLog(@"%d", (int)[[objA objB] retainCount]); // 3
NSLog(@"%d", (int)[[objA objB] retainCount]); // 4
NSLog(@"%d", (int)[objB retainCount]); // 4
}
请看第 23 行,NSLog(@"%d", (int)[[objA objB] retainCount]);
我认为结果应该是 2 而不是 3,但是每次调用 [objA objB] 似乎都会将保留计数增加 1。我不知道发生了什么。谁能告诉我?谢谢!
【问题讨论】:
-
retainCount如何无用地误导的真棒示例。 看起来保留计数增加了 1,但实际上是retain/autorelease。因此,如果您在该示例中 [正确] 创建和排出自动释放池,则日志消息所暗示的保留将消失。 IE。 不要调用retainCount。
标签: objective-c properties retaincount