gpt4 book ai didi

objective-c - 在保留计数 = 1 的 obj 上执行 [obj release] 不会将保留计数减少到零

转载 作者:行者123 更新时间:2023-12-03 16:24:54 25 4
gpt4 key购买 nike

我创建了一个简单的程序来测试 Objective-C 内存管理中的保留/释放方法。据我对 ObjC 内存管理的理解,我希望一个保留计数 = 1 的对象(我对其调用release)将保留计数递减至零,然后释放。但这个测试程序表明,在第一次发布后我仍然得到保留计数= 1:

// TestClass.h
#import <Cocoa/Cocoa.h>
@interface TestClass : NSObject {
}
@end

// TestClass.m
#import "TestClass.h"
@implementation TestClass
@end

// RetainRelease.m
#import <Foundation/Foundation.h>
#include "TestClass.h"

void dumpRetain(id o);

int main (int argc, const char * argv[]) {
TestClass *s = [[TestClass alloc] init];
dumpRetain(s);

[s release];
dumpRetain(s);
}

输出:

2010-08-13 17:42:45.489 RetainRelease[20933:a0f] NSString - retain count=1
2010-08-13 17:42:45.491 RetainRelease[20933:a0f] NSString - retain count=1

有人可以解释一下吗?谢谢

最佳答案

为什么它应该减少到零?当您释放一个保留计数为1的对象时,该对象将被销毁,因此它不再具有retainCount。因此,当它会在几纳秒后消失时,为什么还要费力将其更改为零呢?

另外,不要考虑保留计数的问题。你最终会因为沮丧而自杀。相反,想想“我是否拥有这个对象?如果我拥有,当我使用完它后,我是否可以适本地放弃对该对象的所有权?”

如果您能够正确回答这些问题,那么您只需要做即可。

关于objective-c - 在保留计数 = 1 的 obj 上执行 [obj release] 不会将保留计数减少到零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3478554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com