保留合成属性的计数
|
请查看我的代码:
@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。我不知道发生了什么。谁能告诉我?谢谢!
没有找到相关结果
已邀请:
3 个回复
孝箱捆讨
,
或名称以
,
或
开头的方法,只需担心会调用
。
凸晴
因此,当您通过合成的吸气剂请求对象时,它会保留并自动释放。那是因为从非所有权获取器获得的任何东西都应该在当前自动释放池的生命周期内持续存在,但是如果您在此期间释放了objA,情况就不会如此。
锹缄